각각 크기가 7GB이고 구조가 동일한 5 개의 CSV 파일 목록이 있으며 고유 ID가있는 하나의 DataFrame 만 가져와야합니다.
각 CSV 파일이 단 2 열로 구성되어 있기 때문에 구조는 실제로 정말 간단 userID
하고 count
유형의 열 int
.
문제는 userID
각 사용자에 대해 고유 한 열의 값을 사용하여 첫 번째 DataFrame을로드 하면 다음 DataFrame이 userID
첫 번째 DataFrame에서 동일한 것을 찾을 수 있다는 것입니다.
이 경우 두 count
값을 합산 하고 두 레코드 중 하나만 유지합니다.
예를 들면 :
df1:
"user" "count"
X 3
Y 4
Z 8
W 2
그리고 다음에서 :
df2:
"user" "count"
X 2
W 10
Z 5
T 6
이 예에서는 2 개의 DataFrame만으로 상황을 설명하지만 제 경우에는 5입니다. 내가 얻을 수있는 결과는 다음 DataFrame에 설명되어 있습니다.
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 파일을 읽은 다음 다음을 수행 할 수 있습니다 groupby
.
import pandas as pd
all=[]
for path in ["A.csv", "B.csv"]:
current = pd.read_csv(path, sep='\s+')
all.append(current[["user", "counts"]])
df = pd.concat(all, axis=0, ignore_index=True)
df_res = df.groupby('user', as_index=False).counts.sum()
결과:
user counts
0 T 6
1 W 12
2 X 5
3 Y 4
4 Z 13
dask
:
import dask.dataframe as dd
df = dd.read_csv('*.csv', sep='\s+', usecols=["user", "counts"])
df_res = df.groupby('user').counts.sum().reset_index().compute()
결과:
user counts
0 W 12
1 X 5
2 Y 4
3 Z 13
4 T 6
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다