使用Python数据框架更新来自CSV文件的数据

3
我正在从许多CSV文件中提取数据并将其保存到一个文件中。这个过程是重复的,每隔一段时间,我会有新版本的文件,因此底层数据需要更新。我很难得到所需的数据。这里是我试图做的一个例子:
旧文件(/old/Test1.csv)
tests   col1    col2    col3
test1     11       8       5
test3      9       5       7
test5     12       9      -1

新文件 (/new/Test1.csv)

tests   col2    col3    col4
test1      8       7      15
test3      5       9      10
test7      1       4       9
test9     11      10      12

请注意,在新文件中,col1不再存在,有一个新的列col4,行test5不存在,而有两个新的行test7和test9。期望的输出应该是:
  1. 包含test1.csv和test2.csv中的所有列和行
  2. 包括来自test1.csv的(row,col)对的更新数据
  3. 如果test1.csv中的(row,col)对没有更新,则应使用test1.csv中的数据。
  4. 更新文件中的任何空单元格应填充为0。
对于上面显示的数据,这应该是更新后的文件(Test1_update.csv)。
tests    col1    col2    col3    col4
test1      11       8       7      15
test3       9       5       9      10
test5      12       9      -1       0 
test7       0       1       4       9
test9       0      11      10      12       

我通过下面的代码可以到达这个点:

tests    col1    col2    col3    col4
test1     Nan       8       7      15
test3     Nan       5       9      10
test5     Nan     Nan     Nan     Nan 
test7     Nan       1       4       9
test9     Nan      11      10      12


import pandas as pd
import numpy as np

df1 = pd.read_csv('\\dir\\test1.csv', index_col=0)
df2 = pd.read_csv('\\dir\\test2.csv', index_col=0)

new_index = list(set(list(df1.index.values)+list(df2.index.values)))
new_cols = list(set(list(df1.columns.values)+list(df2.columns.values)))

df3 = pd.DataFrame(index=new_index, columns=new_cols)
df4 = df2.reindex(df3.index)
df4 = df4.join(df3, rsuffix='_P')
df4 = df4.loc[:,~df4.columns.str.endswith('_P')]
print df4

我回顾了你的许多问题,发现你从未提供过任何你尝试过的代码,只是列出了你想要的输出列表。SO不是一个编写代码的服务,分享你尝试过的代码,人们可以从那里帮助你。 - d_kennetz
刚刚添加了迄今为止我一直在尝试的代码。 - arqchicago
我改成了点赞。下班后我会再看一下,如果还没有回答的话。这样做似乎很合理。 - d_kennetz
1个回答

2
我已经成功获得了所需的数据框。
import pandas as pd
import numpy as np

df1 = pd.read_csv('\\dir\\test1.csv', index_col=0)
df2 = pd.read_csv('\\dir\\test2.csv', index_col=0)

new_index = list(set(list(df1.index.values)+list(df2.index.values)))
df2 = df2.reindex(new_index)
df2 = df2.join(df1, rsuffix='_P')
df2 = df2.loc[:,~df2.columns.str.endswith('_P')].fillna(df1).fillna(0)
df2.sort_index(inplace=True)
print df2.to_string()


       col2  col3  col4  col1                        
test1     8     7    15    11
test3     5     9    10     9
test5     9    -1     0    12
test7     1     4     9     0
test9    11    10    12     0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接