我有一个数据帧df_alltrades,它有许多类似的列,其中字符串包括整数:
instrument Bid0Mkt Bid1Mkt Bid2Mkt Bid3Mkt Bid4Mkt ...
0 EURUSD 1.1 1.2 1.2 1.3 1.3
1 NZDUSD 0.6 0.65 0.7 0.9 0.92
. . . . . .
. . . . . .
我还为OfferXMkt
设置了相应的列,并将许多其他列格式化为str
我想删除BidXMkt
和OfferXMkt
中的X
大于0的任何列,这样我就可以得到如下结果:
instrument Bid0Mkt Offer0Mkt ...
0 EURUSD 1.1
1 NZDUSD 0.6
. . .
. . .
我可以通过写出每个if语句来实现这一点
for column in df_alltrades.columns:
if '1' in column:
df_alltrades.drop(columns=column, inplace=True)
if '2' in column:
df_alltrades.drop(columns=column, inplace=True)
if '3' in column:
df_alltrades.drop(columns=column, inplace=True)
if '4' in column:
df_alltrades.drop(columns=column, inplace=True)
但我希望通过一个循环来清理它,比如:
for column in df_alltrades.columns:
for C in range(1, 5):
if C in column:
df_alltrades.drop(columns=column, inplace=True)
但我得到了一个错误:
TypeError: 'in <string>' requires string as left operand, not int
我也尝试过这样的事情
for X in range(1, 5):
BidMkt = 'Bid{}Mkt'.format(X)
df_new = df_alltrades.drop([BidMkt], axis = 1)
即使print(BidMkt)
给出了完整的列表,也只会删除Bid4Mkt
谢谢你的帮助
错误告诉您问题出在哪里C需要是字符串而不是整数:
但是如果我是你的话,我会先这样做以列表的形式获取标题
从这个列表中过滤必要的列,然后使用它像这样分割数据帧
使用列表理解创建删除列表并删除这些列
检查哪些列中没有0:
相关问题 更多 >
编程相关推荐