如何合并/連接兩個資料框
我想合并兩個資料框:第一個是一列具有 datetime64 dtype 的資料框,第二個是 float dtype 一列資料框。這是我嘗試過的:
df1 = pd.DataFrame(df, columns = ['MemStartDate'])
df4 = pd.DataFrame(df, columns = ['TotalPrice'])
df_merge = pd.merge(df1,df2,left_on='MemStartDate',right_on='TotalPrice')
錯誤:您正在嘗試合并 datetime64[ns] 和 float64 列。如果你想繼續,你應該使用 pd.concat
但我該怎么做呢?
uj5u.com熱心網友回復:
你可以試試這個。
df_merge = pd.concat([df1, df2], axis=1)
uj5u.com熱心網友回復:
使用 pd.concat 的最佳選擇,但您也可以嘗試 dataframe.join(dataframe)。有關更多資訊,請嘗試通過此合并、加入、連接和比較
df_merge=df1.join(df2)
uj5u.com熱心網友回復:
讓我們考慮以下情況:
import pandas as pd
# Create dataframe with one column of type datatime64 and one float64
dictionary = {'MemStartDate':['2007-07-13', '2006-01-13', '2010-08-13'],
'TotalPrice':[50.5,10.4,3.5]}
df= pd.DataFrame(dictionary)
pd.to_datetime(df['MemStartDate']) #dtype: datetime64[ns]
df1 = pd.DataFrame(df, columns = ['MemStartDate'])
df4 = pd.DataFrame(df, columns = ['TotalPrice'])
df.TotalPrice # dtype: float64
你有 df1 和 df4 的地方是:
df1
Out:
MemStartDate
0 2007-07-13
1 2006-01-13
2 2010-08-13
df4
Out:
TotalPrice
0 50.5
1 10.4
2 3.5
如果您想連接df1和 df4,這意味著您想沿特定軸連接 pandas 物件,并沿其他軸使用可選的設定邏輯(請參閱pandas.concat — pandas 1.4.2 檔案)。因此在實踐中:
df_concatenated = pd.concat([df1, df4], axis=1)
df_concatenated
新生成的資料框df_concatenated是這樣的:
Out:
MemStartDate TotalPrice
0 2007-07-13 50.5
1 2006-01-13 10.4
2 2010-08-13 3.5
軸決定了您要連接的位置。axis=1您已將第二個資料幀沿第一個資料幀的列連接起來。您可以嘗試axis=0:
df_concatenated = pd.concat([df1, df4], axis=0)
df_concatenated
輸出是:
Out:
MemStartDate TotalPrice
0 2007-07-13 NaN
1 2006-01-13 NaN
2 2010-08-13 NaN
0 NaN 50.5
1 NaN 10.4
2 NaN 3.5
現在,您已沿第一個資料框的行添加了第二個資料框。
另一方面,合并用于在共享某些列時加入資料框。它很有用,因為您可能不想重復存盤具有相同內容的資料幀。例如:
# Create two dataframes
dictionary = {'MemStartDate':['2007-07-13', '2006-01-13', '2010-08-13'],
'TotalPrice':[50.5,10.4,3.5]}
dictionary_1 = {'MemStartDate':['2007-07-13', '2006-01-13', '2010-08-13', '2010-08-14'],
'Shop':['Shop_1','Shop_2','Shop_3','Shop_4']}
df= pd.DataFrame(dictionary)
df_1 = pd.DataFrame(dictionary_1)
如果你有 df 和 df_1 是:
df
Out:
MemStartDate TotalPrice
0 2007-07-13 50.5
1 2006-01-13 10.4
2 2010-08-13 3.5
和
df_1
Out:
MemStartDate Shop
0 2007-07-13 Shop_1
1 2006-01-13 Shop_2
2 2010-08-13 Shop_3
3 2010-08-14 Shop_4
您可以通過以下方式合并它們:
df_merged = pd.merge(df,df_1, on='MemStartDate', how='outer')
df_merged
Out:
MemStartDate TotalPrice Shop
0 2007-07-13 50.5 Shop_1
1 2006-01-13 10.4 Shop_2
2 2010-08-13 3.5 Shop_3
3 2010-08-14 NaN Shop_4
在新資料框中df_merged,您保留舊資料框df和df_1(MemStartDate) 的公共列,并添加兩個資料框中不同的兩列(TotalPrice 和 Shop)。
---->關于在 Pandas 中合并資料框的其他幾個說明性示例:
示例 1. 合并兩個資料幀,保留一個對兩個資料幀都相等的列:
left = pd.DataFrame(
{
"key": ["K0", "K1", "K2", "K3"],
"A": ["A0", "A1", "A2", "A3"],
"B": ["B0", "B1", "B2", "B3"],
}
)
left
right = pd.DataFrame(
{
"key": ["K0", "K1", "K2", "K3"],
"C": ["C0", "C1", "C2", "C3"],
"D": ["D0", "D1", "D2", "D3"],
}
)
right
result = pd.merge(left, right, on="key")
result
Out:
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3
示例 2. 合并兩個資料幀以讀取所有值組合
df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
'value': [1, 2, 3, 5]})
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
'value': [5, 6, 7, 8]})
result = df1.merge(df2, left_on='lkey', right_on='rkey')
result
Out:
lkey value_x rkey value_y
0 foo 1 foo 5
1 foo 1 foo 8
2 foo 5 foo 5
3 foo 5 foo 8
4 bar 2 bar 6
5 baz 3 baz 7
同樣在這種情況下,您可以查看pandas.DataFrame.merge — pandas 1.4.2 檔案(我在其中使用了第二個示例),在這里您還有其他可能的方式來操作您的資料框:合并、連接、連接和比較(我在此處使用第一個例子)。
最后,總結一下,通過研究他們名字在口語中的含義,你可以直觀地理解什么pd.concat()和做什么:pd.merge()
- 連接:以系列或鏈的形式連接在一起
- 合并:使結合、聯合或合并
回到你的錯誤:
錯誤:您正在嘗試合并 datetime64[ns] 和 float64 列。如果你想繼續,你應該使用 pd.concat
它告訴您兩個資料框的公共列具有不同的資料型別。所以他明白你正在嘗試做一些“pd.concat的作業”,所以他建議你使用pd.concat.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466666.html
