我正在尝试解析csv文件并打印某些时间序列图
关于csv文件:csv文件包含大量数据,我需要根据for循环中的id处理对其的确认。csv文件如下所示:
ID,name,date,confirmedInfections
DE2,BAYERN,2020-02-24,19
DE2,BAYERN,2020-02-25,19
DE2,BAYERN,2020-02-26,21
DE1,BADEN-WÃœRTTEMBERG,2020-02-24,1
DE1,BADEN-WÃœRTTEMBERG,2020-02-25,3
DE1,BADEN-WÃœRTTEMBERG,2020-02-26,7
从该文件中,我需要解析每一行并减去confirmedInfections
,以便找到每日感染。在这个时刻,如果我选择一个有ID DE2 and date 2020-03-01
的城市,感染是从乞讨到我选择的那一天的总和。所以,我需要编辑这个文件,以便减去并找到日常案例,以打印适当的时间序列。为了达到减法的目的,我找到了pandas.shift(1)
方法,但它似乎不起作用
我的代码:
def main(file):
id_array = ['DE2', 'DE1']
df = pd.read_csv(file, header='infer', parse_dates=['date'])
for key in id_array:
if (df.loc[df['ID'] == key]):
df['confirmedInfections'] = df['confirmedInfections']-df['confirmedInfections'].shift(1)
print(df)
main('data.txt')
所需输出:
#For DE2
ID,name,date,confirmedInfections
DE2,BAYERN,2020-02-24,19
DE2,BAYERN,2020-02-25,0
DE2,BAYERN,2020-02-26,2
#For DE1
ID,name,date,confirmedInfections
DE1,BADEN-WÃœRTTEMBERG,2020-02-24,1
DE1,BADEN-WÃœRTTEMBERG,2020-02-25,2
DE1,BADEN-WÃœRTTEMBERG,2020-02-26,4
我得到的错误:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
有什么想法吗
您可以使用diff()来解决问题,而不是使用shift()。对于其他部分,这可能不是最理想的解决方案,但应该可以完成工作。由于您的问题中只有两个ID,并且您希望为这两个ID创建单独的数据帧,因此我建议先创建两个数据帧:
考虑到df被理解为:
根据需要更新“确认影响”栏,区别:
解释 按ID对df进行分组,并使用行之间的值差异更新行“confirmedInfections”列,然后使用原始值更新每个groupedID的NaN(第一行)。由于“confirminfections”的计算结果是float类型,因此将列类型转换为int。最后将df拆分为下面的多个df
在多个dfs中拆分df
输出
相关问题 更多 >
编程相关推荐