用Python中的其他数据库更新2D数据库(CSV)?
我基本上有一个文件,比如用Python中的其他数据库更新2D数据库(CSV)?,python,pandas,Python,Pandas,我基本上有一个文件,比如 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或其他套件有很好的工具来
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.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的第1天和第2天信息,但事实并非如此):
将缺少的值替换为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中,非常容易处理。最初,您希望使用模块读入数据,并且模块本身可能为您尝试执行的操作提供足够的功能,特别是如果管理层坚持使用这种格式 为什么不使用像SQLite3这样的实际数据库呢?我正在考虑。有什么好的资源可以用来将进程与SQLite3合并吗?我为其编写代码的人希望使用CSV文件,虽然SQLite3看起来是一个非常好的选择,但我喜欢使用pandas。似乎是这项工作的合适工具。谢谢
>>> 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