(a)利用series新增行(必須指定name)
s = pd.series(,name='new_row')
(b)用dataframe新增表
df_temp = pd.dataframe(,index=['new_1','new_2'])
此方法主要用於新增列,列名直接由引數指定:
s = pd.series(list('abcd'),index=range(4))可以一次新增多個列:
col2=s)
comine和update都是用於表的填充函式,可以根據某種規則填充
1)填充物件
關於combine很重要的一點是需要理解它是按照表的順序輪流進行逐列迴圈的,而且自動索引對齊,缺失值為nan:
df_combine_1 = df.loc[:1,['gender','height']].copy()
df_combine_2 = df.loc[10:11,['gender','height']].copy()
df_combine_1.combine(df_combine_2,lambda x,y:print(x,y))
2)一些例子例①:根據列均值的大小填充
# example_1:看兩個df中誰的均值大就用誰的來填充相應位置
df1 = pd.dataframe()
df2 = pd.dataframe()
df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y)
例②:索引對齊特性(預設狀態下,後面的表沒有的行列都會設定為nan)
df2 = pd.dataframe(,index=[1,2])
df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y)
例③:使得df1原來符合條件的值不會被覆蓋
df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y,overwrite=false)
例④:在新增匹配df2的元素位置填充-1
df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y,fill_value=-1)
3)combine_first方法這個方法作用是用df2填補df1的缺失值,功能比較簡單,但很多時候會比combine更常用,下面舉兩個例子:
df1 = pd.dataframe()
df2 = pd.dataframe()
df1.combine_first(df2)
df1 = pd.dataframe()
df2 = pd.dataframe(, index=[1, 2])
df1.combine_first(df2)
這兩個例子不太一樣的地方在於,第二個例子中df2的索引及列名與df1是不一樣的,因此只能用相應位置的元素進行填充,其他的地方還是nan
1)三個特點
①返回的框索引只會與被呼叫框的一致(預設使用左連線,下一節會介紹)
②第二個框中的nan元素不會起作用
③沒有返回值,直接在df上操作
2)例子
例①:索引完全對齊情況下的操作,會把對應的列和索引中的元素填充,其餘不變
df1 = pd.dataframe()
df2 = pd.dataframe()
df1.update(df2)
例②:部分填充:
df1 = pd.dataframe()
df2 = pd.dataframe(, index=[1,2])
df1.update(df2)
這種情況下,會用df2中和df1中一樣列名和索引的位置上的元素去替換df1
例③:缺失值不會填充
df1 = pd.dataframe()
df2 = pd.dataframe()
df1.update(df2)
concat方法可以在兩個維度上拼接,預設為縱向拼接(axis=0),拼接方式缺省外連線,也就是取拼接方向的並集,而'inner'時取拼接方向(若使用預設的縱向拼接,則為列的交集)的交集。
典型用法如下:
pd.concat([df3,df1],join='outer',sort=true)
merge函式的作用是將兩個pandas物件橫向合併,遇到重複的索引項時會使用笛卡爾積,預設inner連線,可選left、outer、right連線。
所謂左連線,就是指以第乙個表索引為基準,右邊的表中如果不在左邊的則不加入,如果在左邊的就以笛卡爾積的方式加入。
merge/join與concat的不同之處在於on引數,可以指定某乙個物件為key來進行連線,也可以用多組鍵進行連線。
關於笛卡爾積,簡單點理解就是對映要全的意思,例子如下:
上述例子的最終結果
由於right中b這一列有3行,因此,left裡邊每一行中b列的2,都要與right中這3行分別做一遍對映,因此最終有6列。
join函式作用是將多個pandas物件橫向拼接,遇到重複的索引項時會使用笛卡爾積,預設左連線,可選inner、outer、right連線,示例如下:
left = pd.dataframe()
index = pd.multiindex.from_tuples([('k0', 'k0'), ('k1', 'k0'),
('k2', 'k0'), ('k2', 'k1')],names=['key1','key2'])
right = pd.dataframe(,
index=index)
left.join(right, on=['key1','key2'])
combine和update主要是用第二個df來填充第乙個,主要區別在於combine是兩個df按照規則進行逐列組合,自動索引對齊,缺失值補充為nan,update則是使用來自另乙個dataframe的非nan值就地進行修改,在索引上對齊,沒有返回值;
concat可以在兩個維度上對兩個df進行拼接,預設為縱向拼接(axis=0),拼接方式缺省外連線,也就是取拼接方向的並集,而'inner'時取拼接方向(若使用預設的縱向拼接,則為列的交集)的交集。
merge可以將兩個pandas物件橫向合併,遇到重複的索引項時會使用笛卡爾積。與concat在axis=1的差別在於on引數可以指定在key值下連線。
join函式作用是將多個pandas物件橫向拼接,遇到重複的索引項時會使用笛卡爾積,預設左連線,可選inner、outer、right連線。
merge_ordered:函式允許組合時間序列和其他有序資料。 特別是它有乙個可選的fill_method關鍵字來填充/插入缺失的資料。
merge_asof:除了我們匹配最近的鍵而不是相等的鍵之外,其他的都類似於有序的left-join 。 對於左側dataframe中的每一行,我們選擇右側dataframe中on鍵對應的值小於left的鍵對應的值的最後一行。 兩個dataframe必須按鍵排序。
多個dataframe的列合併與行合併
將多個資料表,以時間為索引,並選取需要分析的列進行合併。在本文中,拿到的資料是同一時期的不同裝置的特徵資料,需要提取對應的列進行時間合併,在合併過程中存在以下問題 1 時間索引存在重複,需要刪除重複項,否則合併時會報錯 2 每個表中需要提取的列名稱一樣,需要在合併前進行重新命名,否則合併後就無法區分...
DataFrame資料合併
一 join 作用 預設情況下,他是把行索引相同的資料合併到一起 注意 以左為準,沒有的部分用nan補全 例子import pandas as pd import numpy as np df1 pd.dataframe data np.zeros 2,5 index list ab columns...
多個DataFrame的儲存
datadf型別 list中包含若干個dataframe,由於每個dataframe都很大,現在需要把每個dataframe分別儲存成乙個csv方便讀取 嘗試1 為了省記憶體,把每個dataframe轉換成str格式進行儲存 file open temp diff strline.csv w for...