我在博客上分享的都是在實際項目中遇到的棘手的並且解決的問題,整理出來當作知識總結,希望也能幫助到需要的人。
一、dataframe 的merge方法實現千萬條數據的關聯
這裏的temp1是特徵數據,有幾千萬條,temp2是樣本標籤,有幾萬條,現在需要拿出有標籤的幾萬條樣本的數據,做後續分析。
之前自己寫循環做關聯操作,每次循環到150萬次左右程序就killed了,內存不足,算不出來。
嘗試了好多方法,發現dataframe的merge方法簡直不能更好用,只需一行代碼就能實現,計算速度也是極快的。merge裏面穿四個參數,分別是兩張表的名稱、關聯字段的名稱、和連接方式(left或right)。
temp1 = pd.read_csv('/Users/taorui02/Documents/test_data.txt')
temp2 = pd.read_csv('/Users/taorui02/Documents/test_sample.txt')
merge_data1 = pd.merge(temp2, temp1, on='id', how='left')
merge_data1.to_csv("test.csv", index=False, sep=',')
二、dataframe新增一行數據
dataframe用來做數據處理是十分方便的,可是要增加一行數據的方法我折騰了會兒才解決,因爲它不同於修改、賦值。
如果是修改賦值,這樣就可以:
1.先新建一個dataframe表
import pandas as pd
import numpy as np
df2 = pd.DataFrame(np.arange(16).reshape((4, 4)),
index=['a', 'b', 'c', 'd'],
columns=['one', 'two', 'three', 'four'])
print(df2)
輸出:
one two three four
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
2.修改一列
import pandas as pd
import numpy as np
df2 = pd.DataFrame(np.arange(16).reshape((4, 4)),
index=['a', 'b', 'c', 'd'],
columns=['one', 'two', 'three', 'four'])
df2['one'] = 99999
print(df2)
輸出:
one two three four
a 99999 1 2 3
b 99999 5 6 7
c 99999 9 10 11
d 99999 13 14 15
3. 修改特定值
import pandas as pd
import numpy as np
df2 = pd.DataFrame(np.arange(16).reshape((4, 4)),
index=['a', 'b', 'c', 'd'],
columns=['one', 'two', 'three', 'four'])
df2['one'][0] = 99999
print(df2)
輸出:
one two three four
a 99999 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
4. 使用索引賦值的方式不能實現新增一行,新增的話要用.loc[i]=一個list
這種方式。
# coding:utf-8
from pandas import *
df = DataFrame(columns=('lib', 'qty1', 'qty2')) # 生成空的pandas表
df.loc[0] = [1, 3, 4]
print df
輸出:
lib qty1 qty2
0 1 3 4
三、dataframe裏面的空值判斷
在數據處理的過程中,空值是再常見不過的了。
之前沒有用pandas的時候判斷空值用 if value == '':
來判斷,可是到了dataframe裏面這種代碼就失效了,用if value :
判斷還是報錯,最後發現pandas裏面有自帶的判斷空值的方法。
當在文本文件中,空值爲null,讀入dataframe中,空值就變成了NaN,使用pd.isnull()
或者pd.notnull()
對一列進行空值判斷,即if pd.notnull(value)
來判斷。