我正在嘗試匹配 csv 條目并提取資料但卡住了。我的 csv 檔案是這種格式:
df1 看起來像這樣:
type prediction ax ay az
df2 看起來像這樣:
type ax ay az x y z fx fy fz
我想先匹配df1和df2。為此,我需要匹配ax,ay并az與 `df2. 僅匹配單列可能會給我錯誤的資料框,因為條目重復。
在將多列與 df2 匹配后,我想提取這些值并使用 df1 創建一個資料框。
預期的資料框:
type prediction ax ay az x y z
df1 和 df2 的大小不同。實際上,df2 是一個巨大的檔案,這就是為什么我只想提取所需的資料集。
這是我的代碼:
def match_dataset(df1, df2):
df1_new = pd.DataFrame(columns=['x','y','z','fx','fy','fz','az','ax','ay'])
df2_new = pd.DataFrame(columns=['x','y','z','fx','fy','fz','az','ax','ay'])
for i in range(len(df1)):
for j in range(len(df2)):
if df1.iloc[i]['az'] == df2.iloc[j]['az'] and df1.iloc[i]['ay'] == df2.iloc[j]['ay'] and df1.iloc[i]['ax'] == df2.iloc[j]['ax']:
df1_new = df1_new.append(df2.iloc[j], ignore_index=True)
#df2_new = df2_new.append(df2.iloc[j], ignore_index=True)
return df1_new
data = match_dataset(df1, df2)
print(data.head())
但是我的代碼陷入了回圈。它沒有給我輸出。
我能得到一些幫助嗎?謝謝你。
uj5u.com熱心網友回復:
我認為您可以使用它df1.merge()來獲得所需的輸出。在這里,我使用您的列和每列中的一些亂數字創建兩個 dfs:
import pandas as pd
import numpy as np
df1_cols = ['type', 'prediction', 'ax', 'ay', 'az']
df2_cols = ['type', 'ax', 'ay', 'az', 'x', 'y', 'z', 'fx', 'fy', 'fz']
df1 = pd.DataFrame(np.random.randint(10,size=(4,len(df1_cols))), columns = df1_cols)
df2 = pd.DataFrame(np.random.randint(10,size=(1000,len(df2_cols))), columns = df2_cols)
在此示例中,df1 如下所示:
type prediction ax ay az
0 8 1 8 2 7
1 3 0 5 4 5
2 7 3 0 0 2
3 2 5 3 5 7
現在應用合并:
df1_new = df1.merge(df2, on=['az','ay','ax'], how='left')
print(df1_new)
結果:
type_x prediction ax ay az type_y x y z fx fy fz
0 8 1 8 2 7 3.0 0.0 2.0 6.0 7.0 8.0 9.0
1 3 0 5 4 5 NaN NaN NaN NaN NaN NaN NaN
2 7 3 0 0 2 NaN NaN NaN NaN NaN NaN NaN
3 2 5 3 5 7 9.0 8.0 4.0 0.0 3.0 3.0 1.0
4 2 5 3 5 7 9.0 9.0 1.0 3.0 6.0 5.0 9.0
顯然,在這個隨機示例中,我們發現 2 個匹配項df1.iloc[3],但 0個匹配項df1.iloc[1:3],因此是 NA 值。我們可以簡單地將這些從 df 中洗掉df1_new.dropna(inplace=True)。最后,重置索引df1_new.reset_index(drop=True, inplace=True)::
type_x prediction ax ay az type_y x y z fx fy fz
0 8 1 8 2 7 3.0 0.0 2.0 6.0 7.0 8.0 9.0
1 2 5 3 5 7 9.0 8.0 4.0 0.0 3.0 3.0 1.0
2 2 5 3 5 7 9.0 9.0 1.0 3.0 6.0 5.0 9.0
要僅選擇 中提到的列def,您可以使用:
df1_new[['x','y','z','fx','fy','fz','az','ax','ay']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487939.html
標籤:Python python-3.x 数据框 CSV 匹配
上一篇:將csv檔案中的值分組并將它們保存在另一個csv檔案中
下一篇:從CSV讀取并轉換為字典
