当我将数据添加到dataframe列时,为什么数据是空的?

2024-09-29 19:24:31 发布

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

我使用一个过滤器来检查数据帧中的条件,以便标记它们

filtering = (dfsamen.shift(0).moving=='movingToclose') & (more condtions)
dffilter = pd.Dataframe(data=filtering, columns = ['filter'])
dffilter['DateTime'] = dfsamen['DateTime']

输出:

过滤

4     False
5     False
6      True
7      True

DF滤波器

4    False 2018-06-03 06:33:38.593
5    False 2018-06-03 06:33:39.197
6     True 2018-06-03 06:33:40.597
7     True 2018-06-03 06:33:41.800

但后来我用相同的代码和不同的条件,它不工作

filtering2 = (dfsamen.shift(0).Input5==1) | (more conditions)
dffilter2 = pd.DataFrame(data=filtering2, columns=['filter2'])
dffilter2['DateTime'] = dfsamen['DateTime']

输出:

过滤器2

4     False
5      True
6      True
7      True

dffilter2(添加日期时间之前)

Empty DataFrame
Columns: [filter2]
Index: []

dffilter2(带日期时间)

4      NaN 2018-06-03 06:33:38.593
5      NaN 2018-06-03 06:33:39.197
6      NaN 2018-06-03 06:33:40.597
7      NaN 2018-06-03 06:33:41.800

那么,当我将数据添加到列中时,为什么我的数据在第二个过滤器中会消失呢?即使数据存在于filtering2


Tags: 数据falsetrue过滤器datetimeshiftmorenan
1条回答
网友
1楼 · 发布于 2024-09-29 19:24:31

问题是您的DataFrame构造函数,因为它是默认创建的RangeIndex,所以两个数据帧中可能有不同的索引,数据没有对齐,并且您会得到具有不同索引值的行的NaNs列

解决方案是将值转换为numpy数组:

filtering = (dfsamen.shift(0).moving=='movingToclose') & (more condtions)

dffilter = pd.DataFrame(data=filtering.values, columns = ['filter'])
dffilter['DateTime'] = dfsamen['DateTime'].values
print (dffilter)

样本

dfsamen = pd.DataFrame({
        'A':list('abc'),
        'DateTime':pd.date_range('2015-01-01', periods=3),
        'C':[7,8,9]
}, index=[4,5,6])

print (dfsamen)
   A   DateTime  C
4  a 2015-01-01  7
5  b 2015-01-02  8
6  c 2015-01-03  9

filtering = dfsamen.A == 'a'

dffilter = pd.DataFrame(data=filtering.values, columns = ['filter'])
dffilter['DateTime'] = dfsamen['DateTime'].values
print (dffilter)
   filter   DateTime
0    True 2015-01-01
1   False 2015-01-02
2   False 2015-01-03

或者使用^{}Series转换为具有一列的数据帧:

filtering = dfsamen.A == 'a'

dffilter = filtering.to_frame('filter')
dffilter['DateTime'] = dfsamen['DateTime'].values
print (dffilter)
   filter   DateTime
4    True 2015-01-01
5   False 2015-01-02
6   False 2015-01-03

相关问题 更多 >

    热门问题