我基本上有一个文件,例如
Name Day1 Day2 Day3
Abe 1 2 3
Ben 2 2 1
Cat 2 3 2
我的表单中有“更新文件”
Name Day3 Day4
Abe 4 0
Dan 6 3
所以我需要跟踪哪些行水平延伸,哪些行垂直延伸,哪些行双向延伸。在 Excel 中,这基本上看起来就像将每个数据集分成 4 个,然后将数据粘贴到适当的位置。
我正在拼凑一个解决方案,但我想也许 NumPy 或 Pandas 或其他一些套件有用于此目的的出色工具?
编辑:“更新”文件始终包含更多最新信息,因此它们包含的任何内容都会覆盖原始文件。如果有帮助,则可以认为更新文件对于任何名称/日期组合始终具有更高的数字。
最佳答案
怎么样,使用pandas
:
>>> updated = orig.append(new).groupby('Name').last().fillna(0)
>>> updated
Day1 Day2 Day3 Day4
Name
Abe 1 2 4 0
Ben 2 2 1 0
Cat 2 3 2 0
Dan 0 0 6 3
首先,读入数据(这取决于格式的详细信息):
>>> orig = pd.read_csv("days1.txt", delim_whitespace=True)
>>> new = pd.read_csv("days2up.txt", delim_whitespace=True)
>>> orig
Name Day1 Day2 Day3
0 Abe 1 2 3
1 Ben 2 2 1
2 Cat 2 3 2
>>> new
Name Day3 Day4
0 Abe 4 0
1 Dan 6 3
然后附加新数据,这会自动扩展列:
>>> orig.append(new)
Day1 Day2 Day3 Day4 Name
0 1 2 3 NaN Abe
1 2 2 1 NaN Ben
2 2 3 2 NaN Cat
0 NaN NaN 4 0 Abe
1 NaN NaN 6 3 Dan
按“名称”列组合,并取最后一个有效值(本来我担心这会丢失 Abe 的 Day1 和 Day2 信息,但事实并非如此):
>>> orig.append(new).groupby("Name").last()
Day1 Day2 Day3 Day4
Name
Abe 1 2 4 0
Ben 2 2 1 NaN
Cat 2 3 2 NaN
Dan NaN NaN 6 3
用 0 替换缺失值:
>>> orig.append(new).groupby("Name").last().fillna(0)
Day1 Day2 Day3 Day4
Name
Abe 1 2 4 0
Ben 2 2 1 0
Cat 2 3 2 0
Dan 0 0 6 3
最后写出:
>>> updated = orig.append(new).groupby("Name").last().fillna(0)
>>> updated.to_csv("updated.csv")
>>> !cat updated.csv
Name,Day1,Day2,Day3,Day4
Abe,1.0,2.0,4,0.0
Ben,2.0,2.0,1,0.0
Cat,2.0,3.0,2,0.0
Dan,0.0,0.0,6,3.0
关于python - 使用 Python 中的其他数据库更新 2D 数据库 (CSV)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16739119/