Python 如何通过行标签跳过数据帧行
我试图跳过对一个特定数据帧行求和,因为当我这样做时,我得到了Python 如何通过行标签跳过数据帧行,python,pandas,dataframe,Python,Pandas,Dataframe,我试图跳过对一个特定数据帧行求和,因为当我这样做时,我得到了ValueError:序列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。 我知道这是一个常见的错误,但我已经读了很多文章/帖子,仍然没有弄清楚 原代码为: import os from iexfinance.stocks import Stock import pandas as pd # Set IEX Finance API Token os.environ['IEX_A
ValueError:序列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我知道这是一个常见的错误,但我已经读了很多文章/帖子,仍然没有弄清楚
原代码为:
import os
from iexfinance.stocks import Stock
import pandas as pd
# Set IEX Finance API Token
os.environ['IEX_API_VERSION'] = 'v1'
os.environ['IEX_TOKEN'] = 'token'
df = pd.read_csv("input.csv")
for index, row in df.iterrows():
symbol = (row["Symbol"])
company = Stock(symbol, output_format='pandas')
df_cash_flow = company.get_cash_flow(period="quarter", last='4')
df_cash_flow['TTM'] = df_cash_flow.sum(axis = 1)
print(df_cash_flow)
输出为:
| 6/30/19 | 4/9/19 | 1/5/19 | 10/5/18 | TTM
-----------------------------------------------------------------
capitalExpenditures | 123 | 456 | 789 | 101 | 1469
-----------------------------------------------------------------
cashChange | 101 | 633 | 453 | 902 | 2089
-----------------------------------------------------------------
............
-----------------------------------------------------------------
reportDate | 6/30/19 | 4/9/19 | 1/5/19 | 10/5/18 | 2019-06-302019-04-09...
-----------------------------------------------------------------
depreciation | 764 | 122 | 423 | 199 | 1508
-----------------------------------------------------------------
但我只希望输出是:
| 6/30/19 | 4/9/19 | 1/5/19 | 10/5/18 | TTM
-----------------------------------------------------------------
capitalExpenditures | 123 | 456 | 789 | 101 | 1469
-----------------------------------------------------------------
cashChange | 101 | 633 | 453 | 902 | 2089
-----------------------------------------------------------------
............
-----------------------------------------------------------------
reportDate | 6/30/19 | 4/9/19 | 1/5/19 | 10/5/18 |
-----------------------------------------------------------------
depreciation | 764 | 122 | 423 | 199 | 1508
-----------------------------------------------------------------
因此,我尝试使用df.loc['reportDate']
跳过reportDate
行标签:
df_cash_flow = company.get_cash_flow(period="quarter", last='4')
if df_cash_flow.loc['reportDate']:
pass
else:
df_cash_flow['TTM'] = df_cash_flow.sum(axis = 1)
但这将返回ValueError
如何解决此问题?解决方法
如果问题仅仅是一个单元格,那么像丢弃不需要的结果这样的解决方法是可以接受的
按其工作方式进行求和:df\u cash\u flow['TTM']=df\u cash\u flow.sum(axis=1)
然后做: 这样,您就可以用空字符串替换行
'reportDate'
和列'TTM'
处单元格中的值
正确的解决方案
正确的解决方案是在求和之前只选择所需的行:
df_cash_flow['TTM'] = df_cash_flow.loc[df_cash_flow.index.drop('reportDate')].sum(axis=1)
通过从索引中删除'reportDate'
,只对其他行执行求和。您在单元格中的行'reportDate'
和列'TTM'
处获得NaN
如果需要,可以轻松扩展此解决方案以排除其他行。只需删除所有你不想求和的索引标签,将它们放在一个列表中:df\u cash\u flow.index.drop(['reportDate','otherlabel1','otherlabel2'])
df_cash_flow['TTM'] = df_cash_flow.loc[df_cash_flow.index.drop('reportDate')].sum(axis=1)