【问题标题】:Reading specific rows out of a panda dataframe using a list使用列表从熊猫数据框中读取特定行
【发布时间】:2019-11-08 02:56:45
【问题描述】:

我有一个 pandas 数据框,我需要将特定行从新数据框中拉出并拉入新数据框。 这些行在一个列表中,如下所示:[42 50 52 59 60 62]

我正在从 .csv 文件创建数据框,但据我所知,在读取 .csv 和创建数据框时无法指定行号。

import pandas as pd 

df = pd.read_csv('/Users/uni/Desktop/corrindex+id/rt35',index_col = False, header = None )

这是数据框的一部分:

                    0
0      1 269 245 44 5
1      2 293 393 33 5
2     3 295 175 67 12
3      4 298 415 33 5
4    5 304 392 213 11

【问题讨论】:

标签: python pandas


【解决方案1】:

skiprows 与可调用对象一起使用:

import pandas as pd

keep_rows = [42 50 52 59 60 62]

df = pd.read_csv('/Users/uni/Desktop/corrindex+id/rt35', 
                 header=None
                 skiprows=lambda x: x not in keep_rows)

【讨论】:

    【解决方案2】:

    不幸的是,pandas read_cvs 需要一个真正的文件,而不仅仅是一个行生成器,所以只选择一堆行并不容易。但是您可以轻松地在 Python 级别做到这一点:

    lines = [line for i, line in enumerate(open('/Users/uni/Desktop/corrindex+id/rt35'), 1)
             if i in [42 50 52 59 60 62]]
    df = pd.read_csv(io.StringIO(''.join(lines)),index_col = False, header = None )
    

    您也可以使用skiprows 忽略除要保留的行之外的所有行:

    df = pd.read_csv('/Users/uni/Desktop/corrindex+id/rt35',index_col = False, 
                     header = None, skiprows=lambda x: x not in [42 50 52 59 60 62])
    

    【讨论】:

    • 谢谢你,不幸的是我在尝试时遇到了一个错误: Traceback (most recent call last): File "/Users/uni/Desktop/corrindex+id/Pandas to createxyt .py",第 6 行,在 df = pd.read_csv(io.StringIO(''.join(lines)),index_col = False, header = None ) TypeError: initial_value must be unicode or None, not str
    • @mattp:如果您使用的是 Python 2.x,则必须使用 io.BytesIO 而不是 io.StringIO
    【解决方案3】:

    你可以这样做:

    import pandas as pd
    
    my_list = [42, 50, 52, 59, 60, 62] 
    
    df = pd.read_csv('/Users/uni/Desktop/corrindex+id/rt35',
                     index_col= False,
                     header=None,
                     nrows=max(my_list) + 1).iloc[mylist]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-15
      • 2021-03-20
      • 1970-01-01
      • 2018-12-25
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多