2 回答

TA貢獻1719條經驗 獲得超6個贊
我會加載數據
pandas.read_csv
.rename
一些專欄創建數據幀后
working
,查看數據幀以驗證已加載正確的列,并且使用正確的列索引進行重命名。重命名 , 中的列
working
取決于列索引,因為working.csv
沒有列標題。的
date
列arch
實際上應該是email
,因為標題標識其下方的內容,而不是其他列標題。一旦在 中更改了列名稱
archive.csv
,則不再需要重命名。
pandas.merge
在柱子上email
。由于兩個數據框都有一列重命名為
email
,因此合并結果將只有一email
列。如果合并發生在兩個不同的列名稱上,則結果將有兩列包含電子郵件地址。
pandas:合并、連接、連接和比較
只要文件中的列一致,就應該無需修改即可工作
import pandas as pd
from datetime import datetime
# get the date string
datestring = datetime.strftime(datetime.now(), '%d-%b')
# read archive
arch = pd.read_csv('archive.csv')
# rename columns
arch.rename(columns={'date': 'email'}, inplace=True)
# read working, but only the two columns that are needed
working = pd.read_csv('working.csv', header=None, usecols=[1, 3])
# rename columns
working.rename(columns={1: 'email', 3: datestring}, inplace=True)
# only emails greater than 30 or already in arch
working = working[(working[datestring] > 30) | (working.email.isin(arch.email))]
# merge
arch_updated = pd.merge(arch, working, on='email', how='outer').fillna(0)
# save to csv
arch_updated.to_csv('archive.csv', index=False)
# display(arch_updated)
? ? ? ? ? email? 01-sep? 27-Aug
[email protected]? ?154.0? ? 31.0
[email protected]? ?128.0? ? 19.0
[email protected]? ? 77.0? ? 92.0
[email protected]? ? 63.0? ? ?0.0
[email protected]? ? ?0.0? ?117.0

TA貢獻2016條經驗 獲得超9個贊
所以,問題是你有兩組數據。兩者都通過“關鍵”條目(電子郵件)存儲數據以及您想要壓縮到一個存儲中的其他數據。確定這兩組數據都存在相似的“密鑰”可以大大簡化這一過程。
將每個鍵想象為一個存儲桶的名稱。每個存儲桶需要兩條信息,一條來自一個 csv,另一條來自另一個 csv。
現在,我必須繞點小彎路來解釋一下Python中的字典。這是從這里竊取的定義
字典是一個無序、可更改且有索引的集合。
集合是一個類似于保存數據的列表的容器。無序和索引意味著字典不能像列表一樣訪問,其中數據可以通過索引訪問。在這種情況下,字典是使用鍵訪問的,鍵可以是字符串或數字之類的任何東西(從技術上講,鍵必須是可散列的,但這太深入了)。最后,可更改意味著字典實際上可以更改其存儲的數據(再次過于簡單化)。
例子:
dictionary = dict()
key = "Something like a string or a number!"
dictionary[key] = "any kind of value can be stored here! Even lists and other dictionaries!"
print(dictionary[key])? # Would print the above string
我建議您使用以下結構來代替大多數列表:
dictionary[email] = [item1, item2]
這樣,您可以避免使用多個列表并大大簡化您的代碼。
添加回答
舉報