Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python中的其他数据库更新2D数据库(CSV)?_Python_Pandas - Fatal编程技术网

用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