【问题标题】:Skipping rows in a csv file using Python Pandas使用 Python Pandas 跳过 csv 文件中的行
【发布时间】:2013-07-23 10:56:53
【问题描述】:

我有一个关于使用 Pandas 读取 csv 文件的快速问题。我拥有的 CSV 文件格式为:

Num  Date     Value1   Value2   Value3 
1   7/29/11    1        2        3       
2   7/22/11    NA       3        1       
3   7/15/11    5        NA       NA  
4   7/6/11    -1        0        2

我想使用 pandas 读取这个 csv 文件。但是,我需要跳过任何一个列条目为 NA 的行(在这种情况下,我需要跳过第 2 行和第 3 行)。

谢谢!

【问题讨论】:

    标签: python csv numpy pandas


    【解决方案1】:

    正如@Rutger 指出的那样,您可以简单地使用dropna:

    In [11]: df.dropna(subset=['Value1', 'Value2', 'Value3'])
    Out[11]:
       Num     Date  Value1  Value2  Value3
    0    1  7/29/11       1       2       3
    3    4   7/6/11      -1       0       2
    

    .

    我建议的初始方式(这显然不是最优的),一旦你将它作为 DataFrame 读入,你可以使用notnull 删除这些行(你只想保留那些都是notnull 的行) :

    In [21]: df.loc[:, ['Value1', 'Value2', 'Value3']].apply(pd.notnull)
    Out[21]:
      Value1 Value2 Value3
    0   True   True   True
    1  False   True   True
    2   True  False  False
    3   True   True   True
    
    In [22]: df.loc[:, ['Value1', 'Value2', 'Value3']].apply(pd.notnull).all(1)
    Out[22]:
    0     True
    1    False
    2    False
    3     True
    dtype: bool
    

    并且只选择那些行:

    In [23]: df[df.loc[:, ['Value1', 'Value2', 'Value3']].apply(pd.notnull).all(1)]
    Out[23]:
       Num     Date  Value1  Value2  Value3
    0    1  7/29/11       1       2       3
    3    4   7/6/11      -1       0       2
    
    In [24]: df = df[df.loc[:, ['Value1', 'Value2', 'Value3']].apply(pd.notnull).all(1)]
    

    【讨论】:

    • 谢谢安迪!这是完美的。 :)
    • 那不就等于df.dropna()吗?如果您只想考虑“ValueX”列,则可以使用df.dropna(subset=['Value1','Value2','Value3'])。
    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多