Python 如何从多个数据帧更新数据帧的计数列?
我有一个5个CSV文件的列表,每个文件大小为7GB,具有相同的结构,我只需要获得一个具有唯一ID的数据帧 实际上,结构非常简单,因为每个CSV文件只由两列组成,Python 如何从多个数据帧更新数据帧的计数列?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个5个CSV文件的列表,每个文件大小为7GB,具有相同的结构,我只需要获得一个具有唯一ID的数据帧 实际上,结构非常简单,因为每个CSV文件只由两列组成,userID和count类型为int的列 问题是,一旦我加载了第一个数据帧,并且列userID中的值对于每个用户都是唯一的,接下来的数据帧可能会在第一个数据帧中找到相同的userID 如果发生这种情况,我将对两个计数值求和,并只保留两个记录中的一个 例如: df1: "user" "count" X 3 Y
userID
和count
类型为int
的列
问题是,一旦我加载了第一个数据帧,并且列userID
中的值对于每个用户都是唯一的,接下来的数据帧可能会在第一个数据帧中找到相同的userID
如果发生这种情况,我将对两个计数值求和,并只保留两个记录中的一个
例如:
df1:
"user" "count"
X 3
Y 4
Z 8
W 2
在下面的一个例子中:
df2:
"user" "count"
X 2
W 10
Z 5
T 6
在这个例子中,我解释了只有2个数据帧的情况,但在我的例子中,它们是5个。我将获得的结果在以下数据框中描述:
df_res:
"user" "count"
X 5
Y 4
Z 13
W 12
T 6
到目前为止,我尝试的是:
import pandas as pd
users = {}
for path in ["A.csv", "B.csv", "C.csv", "D.csv", "E.csv"]:
current = pd.read_csv(path) # here the columns are "user", "counts" and others
_users = pd.DataFrame(columns=["user", "counts"])
if users:
_users = _users.append(users)
_users = _users.append(current.loc[:, ["user", "counts"]], ignore_index=True)
users = _users.to_dict(orient='records')
您可以在一个数据帧中读取所有单个csv文件,然后:
结果:
user counts
0 T 6
1 W 12
2 X 5
3 Y 4
4 Z 13
user counts
0 W 12
1 X 5
2 Y 4
3 Z 13
4 T 6
使用以下工具更新大型csv文件:
结果:
user counts
0 T 6
1 W 12
2 X 5
3 Y 4
4 Z 13
user counts
0 W 12
1 X 5
2 Y 4
3 Z 13
4 T 6
这并不是那么简单,我以前没有这么说,但是每个文件都是7GB,所以我认为,对于这个解决方案,我会得到一个MemoryError
。在这种情况下,您应该看看,您还可以在每个新csv之后执行循环中的groupby,这样您就不需要在内存中保存所有文件,只需要处理它们