使用 Python,我試圖創建一個腳本來比較兩個不同 csv 中的資料。第一個 csvfiledata.csv包含包含用戶名和用戶 ID 資訊的檔案路徑字串。第二個 csvroster.csv包含分解為不同列的相同欄位。我想在檔案路徑字串中filedata.csv搜索匹配項roster.csv,然后將列寫入roster.csv到filedata.csv. 下面是 csv 結構和所需的輸出。
filedata.csv
filename
C:\johndoe_0001_paper1.doc
C:\janedoe_0002_paper2.doc
C:\johnsmith_0003_paper3.pdf
roster.csv
first_name, last_name, user_id
john, doe, 0001
jane, doe, 0002
john, smith, 0003
所需的輸出filedata.csv:
filename, first_name, last_name, user_id
C:\johndoe_0001_paper1.doc, john, doe, 0001
C:\janedoe_0002_paper2.doc, jane, doe, 0002
C:\johnsmith_0003_paper3.pdf, john, smith, 0003
我嘗試使用 Pandas 執行以下代碼,以查看是否可以通過以下字串搜索filenames.csv匹配項roster.csv:
import pandas as pd
df = pd.read_csv('filenames.csv')
filenames = str(df['filename'])
roster = pd.read_csv('roster.csv')
roster_last_name = str(roster['last_name'])
roster_first_name = str(roster['first_name'])
roster_user_id = str(roster['user_id'])
print(df.loc([filenames]).str.contains([roster_last_name]))
但得到以下錯誤:
TypeError: unhashable type: 'list'
同樣,我嘗試了一些更簡單的方法,但沒有成功,因為總是回傳“False”:
if roster_last_name in filenames:
print("True")
else:
print("False")
我確定我錯過了一些簡單的東西,但不確定如何繼續。非常感謝所有建議。
uj5u.com熱心網友回復:
filename['user_id'] = filename['filename'].str.extract(r'(\d{4})')
new_df = filename.merge(roster, on='user_id')
此解決方案向filename從檔案名中提取的四位數 ID(作為字串)添加一列,然后合并來自用戶 ID 相同的兩個資料幀中的行。
您的解決方案不起作用,因為諸如str(roster['last_name'])采用一系列并回傳一個字串之類的運算式。
更新:
上述解決方案假設 user_id 列中roster包含字串。如果它們是整數,請執行以下操作:
filename['user_id'] = filename['filename'].str.extract(r'(\d{4})').astype(int)
new_df = filename.merge(roster, on='user_id')
唯一的區別是.astype(int)。
如果這不是我們想要的,請告訴我。
uj5u.com熱心網友回復:
使用以下(df1fromfilenames.csv和df2from roster.csv):
for i in df1.index:
for c in df2.columns:
df1.loc[df1.filename.str.contains(df2.loc[i, "last_name"] and df2.loc[i, "user_id"].astype(str)), c] = df2.loc[i, c]
這會檢查last_nameand user_id,因為janeandjohn都有doeas last_name。這為您提供以下內容:
| | filename | first_name | last_name | user_id |
|---:|:-----------------------------|:-------------|:------------|----------:|
| 0 | C:\johndoe_0001_paper1.doc | john | doe | 1 |
| 1 | C:\janedoe_0002_paper2.doc | jane | doe | 2 |
| 2 | C:\johnsmith_0003_paper3.pdf | john | smith | 3 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/359269.html
上一篇:“utf-8”編解碼器無法解碼位置2912中的位元組0xd5:在Python中讀取csv檔案時出現無效的連續位元組錯誤
下一篇:在缺失值索引上附加一個串列
