本文研究的主要是pandas常用函數,具體介紹如下。
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport datetimeimport re
df = pd.read_csv(path='file.csv')
參數:header=None 用默認列名,0,1,2,3...
names=['A', 'B', 'C'...] 自定義列名
index_col='A'|['A', 'B'...] 給索引列指定名稱,如果是多重索引,可以傳list
skiprows=[0,1,2] 需要跳過的行號,從文件頭0開始,skip_footer從文件尾開始
nrows=N 需要讀取的行數,前N行
chunksize=M 返回迭代類型TextFileReader,每M條迭代一次,數據占用較大內存時使用
sep=':'數據分隔默認是',',根據文件選擇合適的分隔符,如果不指定參數,會自動解析
skip_blank_lines=False 默認為True,跳過空行,如果選擇不跳過,會填充NaN
converters={'col1', func} 對選定列使用函數func轉換,通常表示編號的列會使用(避免轉換成int)dfjs = pd.read_json('file.json') 可以傳入json格式字符串
dfex = pd.read_excel('file.xls', sheetname=[0,1..]) 讀取多個sheet頁,返回多個df的字典
df.duplicated() 返回各行是否是上一行的重復行
df.drop_duplicates() 刪除重復行,如果需要按照列過濾,參數選填['col1', 'col2',...]
df.fillna(0) 用實數0填充na
df.dropna() axis=0|1 0-index 1-column
how='all'|'any' all-全部是NA才刪 any-只要有NA就全刪
del df['col1'] 直接刪除某一列
df.drop(['col1',...], aixs=1) 刪除指定列,也可以刪除行
df.column = col_lst 重新制定列名
df.rename(index={'row1':'A'}, 重命名索引名和列名
columns={'col1':'A1'})
df.replace(dict) 替換df值,前后值可以用字典表,{1:‘A', '2':'B'}
def get_digits(str):
m = re.match(r'(/d+(/./d+)?)', str.decode('utf-8'))
if m is not None:
return float(m.groups()[0])
else:
return 0
df.apply(get_digits) DataFrame.apply,只獲取小數部分,可以選定某一列或行
df['col1'].map(func) Series.map,只對列進行函數轉換
pd.merge(df1, df2, on='col1',
how='inner',sort=True) 合并兩個DataFrame,按照共有的某列做內連接(交集),outter為外連接(并集),結果排序
pd.merge(df1, df2, left_on='col1',
right_on='col2') df1 df2沒有公共列名,所以合并需指定兩邊的參考列
pd.concat([sr1, sr2, sr3,...], axis=0) 多個Series堆疊成多行,結果仍然是一個Series
pd.concat([sr1, sr2, sr3,...], axis=1) 多個Series組合成多行多列,結果是一個DataFrame,索引取并集,沒有交集的位置填入缺省值NaN
df1.combine_first(df2) 用df2的數據補充df1的缺省值NaN,如果df2有更多行,也一并補上
新聞熱點
疑難解答