忽略pandas datafram中的非数字字符串值

2024-05-15 22:36:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,其中一列可能有三种值,整数(12331)、作为字符串的整数('345')或其他字符串('text')。

有没有办法从数据框中删除所有带有最后一种字符串的行,并将第一种字符串转换为整数?或者,如果我对列求和,至少可以通过某种方式忽略导致类型错误的行。

这个数据帧是从一个相当大的CSV文件(25gb)中读取的,所以我想要一个在分块读取时可以工作的解决方案。


Tags: 文件csv数据字符串text类型错误方式
3条回答

Pandas有一些工具可以转换这些类型的列,但它们可能并不完全适合您的需要。pd.to_numeric像您这样转换混合列,但将非数字字符串转换为NaN。这意味着您将得到浮点列,而不是整数,因为只有浮点列可以有NaN值。这通常不太重要,但值得注意。

df = pd.DataFrame({'mixed_types': [12331, '345', 'text']})

pd.to_numeric(df['mixed_types'], errors='coerce')
Out[7]: 
0    12331.0
1      345.0
2        NaN
Name: mixed_types, dtype: float64

如果要删除所有NaN行:

# Replace the column with the converted values
df['mixed_types'] = pd.to_numeric(df['mixed_types'], errors='coerce')

# Drop NA values, listing the converted columns explicitly
#   so NA values in other columns aren't dropped
df.dropna(subset = ['mixed_types'])
Out[11]: 
   mixed_types
0      12331.0
1        345.0

您可以直接使用df.u get_numeric_data()。

可以使用^{}errors=coerce来用NaN替换非数值,并将其应用于每一列。然后你可以使用dropnafillna任何你喜欢的。

df = pd.read_csv('file.csv')
df = df.apply(pd.to_numeric, errors='coerce')
df = df.dropna()

相关问题 更多 >