熊猫数据框索引过滤

Posted

技术标签:

【中文标题】熊猫数据框索引过滤【英文标题】:pandas dataframe indexing filtering 【发布时间】:2015-05-28 20:39:18 【问题描述】:

我有两个具有相同时间分辨率的数据帧。从第一个数据帧(在我的情况下:df_data1)我只想让所有值 ['A'] 其中 ['B']

df_data1 = pd.io.parsers.read_csv(station_path, skiprows=0, index_col=0, na_values=[-999], names= names_header , sep=';', header=None , squeeze=True)

date     A  B
16.08.2013 03:00     -1  97
16.08.2013 03:15     -1  95
16.08.2013 03:30     0   92
16.08.2013 03:45     4  90
16.08.2013 04:00     18 88
16.08.2013 04:15     42 86
16.08.2013 04:30 73 83
16.08.2013 04:45     110    81
16.08.2013 05:00    151 78

现在我想要所有 df_data['A'] ,其中 df_data['B']

df_data = df_data[(df_data['B']  < 90)]

第二个数据框看起来像:

df_data2 = pd.io.parsers.read_csv(station_path, skiprows=1, sep=";",  index_col=False, header=None)

date    w   x   y   z
16.08.2013 03:00    0   0   0   0
16.08.2013 03:15    0   0   0   0
16.08.2013 03:30    0   0   0   0
16.08.2013 03:45    0   0   0   0
16.08.2013 04:00    0   0   0   0
16.08.2013 04:15    0   0   0   0
16.08.2013 04:30    47  47  48  0
16.08.2013 04:45    77  78  79  88
16.08.2013 05:00    111 112 113 125

有没有人想办法解决这个问题? 我需要相同形状的数据框,因为我还想计算 np.corrcoef 等等。

【问题讨论】:

【参考方案1】:

你的第一部分已经完成了:

df_data = df_data[(df_data['B']  < 90)]

然后您可以使用 df_data['A'] 访问 A 列

如果两个 df 中的索引值相同,那么这应该可以:

In [40]:

df1.loc[df_data.index]
Out[40]:
                       w    x    y   z
date                                  
2013-08-16 04:00:00    0    0    0   0
2013-08-16 04:15:00    0    0    0   0
2013-08-16 04:30:00   47   47   48   0
2013-08-16 04:45:00   77   78   79  88
2013-08-16 05:00:00  111  112  125 NaN

编辑

不清楚为什么您会收到KeyError,但您也可以使用以下内容:

df_data2[df_data2.index.isin(df_data1.index)]

这将处理第二个 df 中不存在的任何索引值。

【讨论】:

谢谢回答!我收到此错误:_has_valid_type 中的文件“C:\WinPython-64bit-2.7.9.3\python-2.7.9.amd64\lib\site-packages\pandas\core\indexing.py”,第 1283 行.obj._get_axis_name(轴))) 你是逐字使用我的回答还是这样做:df_data2.loc[df_data.index]? df_data1 来自 TimeSeries 类型而 df_data2 来自 DataFrame 类型这是一个问题吗? 它应该仍然可以工作,你能发布原始输入数据和代码来重现你的问题吗,另一种选择是df_data2[df_data2.index.isin(df_data1.index)]【参考方案2】:

完成这个:

第一种方法出现错误

但使用以下表达式效果很好:

df_data2[df_data2.index.isin(df_data1.index)]

【讨论】:

以上是关于熊猫数据框索引过滤的主要内容,如果未能解决你的问题,请参考以下文章

如何按月份和年份输入过滤具有日期时间索引的数据框?熊猫

在熊猫多索引数据框中返回满足逻辑索引条件的每个组的最后一行[重复]

按天过滤熊猫数据框

按列表过滤熊猫数据框

根据日期列熊猫过滤数据框

如何按字符串过滤熊猫数据框?