python - 使用 Python 中的其他数据库更新 2D 数据库 (CSV)?

标签 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 或其他一些套件有用于此目的的出色工具?

编辑:“更新”文件始终包含更多最新信息,因此它们包含的任何内容都会覆盖原始文件。如果有帮助,则可以认为更新文件对于任何名称/日期组合始终具有更高的数字。

最佳答案

怎么样,使用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/

相关文章:

python - 如何在不影响数据库的情况下重新排序内存缓存

python - 如何在 Pandas 0.24.2 中将 offsets.MonthEnd 系列转换为 int

python - 在另一个 csv 文件中查找一个 csv 文件的值并打印该行

python - 使用 iterrows 选择 pandas 数据框中的下 N 行

c# - 在托管代码中,如何实现良好的引用位置?

python - 覆盖文件的第 n 个字节

python - Python os.popen : How to ensure popen(…) has completed execution before continuing?

python - 我可以在 django 1.3 的 orm 中控制 GROUP BY 吗?

python - 这些 X 和 Y 变量如何在线性回归中使用?

Python Pandas 替换列名