将带NaN值的字符串转换为整数(在pandas中)

6
我有一个Pandas数据框,所有的值都是字符串形式。有些是“None”,其余的是字符串形式的整数,如“123456”。我该如何将所有的“None”转换为np.nan,并将其他值转换为整数,如123456?
df = {'col1': ['1', 'None'], 'col2': ['None', '123']}

将df转换为:

df = {'col1': [1, NaN], 'col2': [NaN, 123]}

3
df是数据框(dataframe)还是字典(dictionary)? - cs95
3个回答

6
请使用以下代码:
print(df.replace('None', np.nan).astype(float))

输出:

   col1   col2
0   1.0    NaN
1   NaN  123.0

您需要使用replace

附注:如果df是字典,请先转换:

df = pd.DataFrame(df)

2
谢谢,但整数字符串怎么办?它们会自动转换为浮点数吗? - Ting Wang
@TingWang 已经编辑了我的内容,现在他们会的 :-) - U13-Forward
1
只是一个小注释,因为这现在是被接受的答案:它将数字数据转换为浮点数,而不是整数(正如OP所请求的)。 - cs95

4
你可以将列转换为 可空整数 类型(在 0.24+ 中新增):
d = {'col1': ['1', 'None'], 'col2': ['None', '123']}
res = pd.DataFrame({
    k: pd.to_numeric(v, errors='coerce') for k, v in d.items()}, dtype='Int32')
res

   col1  col2
0     1   NaN
1   NaN   123

使用此解决方案,数值数据将被转换为整数(但缺失数据仍然为NaN):
res.to_dict()
# {'col1': [1, nan], 'col2': [nan, 123]}

在旧版本中,初始化DataFrame时,请转换为object:
res = pd.DataFrame({
    k: pd.to_numeric(v, errors='coerce') for k, v in d.items()}, dtype=object)
res

  col1 col2
0    1  NaN
1  NaN  123

它与上述可空类型解决方案不同——仅表示形式发生变化,而实际数据并未改变。
res.to_dict()
#  {'col1': [1.0, nan], 'col2': [nan, 123.0]}

1

你还可以使用:

import pandas as pd
d = {'col1': ['1', 'None'], 'col2': ['None', '123']}
df = pd.DataFrame.from_dict(d).replace("None", value=pd.np.nan).astype(float)

   col1   col2
0   1.0    NaN
1   NaN  123.0

col1    1 non-null float64
col2    1 non-null float64
dtypes: float64(2)

1
数据类型仍然是对象,数字是字符串。 - cs95
1
你编辑后它们仍然是字符串。运行 result.values.tolist() 查看一下... - cs95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接