2

我基本上有一个文件,例如

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 或其他一些套件可能有很好的工具来实现这个目的?

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

4

2 回答 2

2

这个怎么样,使用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
于 2013-05-24T16:14:42.640 回答
0

sqlite3模块可能更适合像这样的动态修改数据。它内置在 Python 中,并且很容易处理。最初,您将希望使用该csv模块读取数据,并且它本身可能为您尝试执行的操作提供足够的功能,特别是如果管理层坚持使用这种格式。

于 2013-05-24T16:33:21.453 回答