【问题标题】:Getting Python Pandas dropna method to work with 'N/A' values?让 Python Pandas dropna 方法使用“N/A”值?
【发布时间】:2015-11-19 22:46:13
【问题描述】:

我有一个 csv 文件,其中字段中的某些值是 N/A。我已经尝试了几种方法来摆脱那些无法解决的问题,我也无法理解dropna() 函数的工作原理。

例子:

姓名、年龄、地位、 盟友, 21, 单身, 丹尼尔,32 岁,单身, 约翰,不适用,已婚, 贝克,25 岁​​,单身, 乔希,N/A,已婚

我正在尝试使用 dropna 方法删除“N/A”值。 我希望结果返回一个包含年龄为[21,32,25] 的列表 我该怎么做?

【问题讨论】:

  • 欢迎来到 SO。发布您的相关代码,并确保按照 CSV 文件中的格式设置示例数据。

标签: python pandas


【解决方案1】:

使用pandas.read_csv() 读取CSV 文件并指定skipinitialspace=True。这将启用默认的“N/A”检测,前导空格会阻止该检测。

>>> from pandas import read_csv
>>> df = read_csv('input.csv', skipinitialspace=True)
>>> df
     name  Age   Status  Unnamed: 3
0    Ally   21   Single         NaN
1  Daniel   32   Single         NaN
2    John  NaN  Married         NaN
3   Baker   25   Single         NaN
4    Josh  NaN  Married         NaN

最后一列是空的,是大多数行末尾的, 的结果。你可以删除它:

>>> df.drop(df.columns[-1], axis=1, inplace=True)
>>> df
     name  Age   Status
0    Ally   21   Single
1  Daniel   32   Single
2    John  NaN  Married
3   Baker   25   Single
4    Josh  NaN  Married

然后你可以删除不需要的行:

>>> df.dropna(inplace=1)
>>> df
     name  Age  Status
0    Ally   21  Single
1  Daniel   32  Single
3   Baker   25  Single

最终名单由:

>>> ages = list(df['Age'])
>>> ages
[21.0, 32.0, 25.0]
>>> # or, if you want ints...
>>> ages = list(df['Age'].astype(int))
>>> ages
[21, 32, 25]

这是简短的版本:

>>> df = read_csv('input.csv', skipinitialspace=True)
>>> ages = list(df.drop(df.columns[-1], axis=1).dropna()['Age'].astype(int))
>>> print ages
[21, 32, 25]

【讨论】:

  • 好的,我明白你的意思了。现在,假设 df = read_csv('input.csv', skipinitialspace=True) 在 'input.csv' 部分,我想这样, file = 'c:\somepath\input.csv' ,然后 df = read_csv(file, skipinitialspace=True) 当我使用它时,它不起作用。它说参数应该是一个字符串。
  • 尝试使用原始字符串作为文件名:filename = r'c:\somepath\input.csv' ; df = read_csv(filename, skipinitialspace=True)。您可能会发现这是相同的,但使用原始字符串将避免由于反斜杠而可能形成特殊字符的问题,例如\n\t
  • 好的.. 非常感谢您的帮助。感谢您的帮助。
  • 如果这回答了你的问题(我很确定它已经回答了),那么你应该接受它。
猜你喜欢
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 2022-11-28
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
相关资源
最近更新 更多