新建乙個excel**(table1.csv)用於案例講解:
df = pd.read_excel('table1.xlsx') # 相對路徑
# df = pd.read_excel(r'e:\anaconda\hc\datascience\table1.csv') # 絕對路徑
顯示資料的行與列數
df.shape
(6, 5)
顯示資料格式dtpyes
df.dtypes
name object
age int64
*** int64
class int64
score float64
dtype: object
顯示列名
df.columns
index(['name', 'age', '***', 'class', 'score'], dtype='object')
顯示前資料前2行
顯示資料後3行
顯示資料唯一值(unique函式)
df['score'].unique()
array([ 80., 90., 100., nan])
對第幾行資料不讀取
# 沒有讀取第2行
對缺失值進行識別
# 所有缺失值顯示為true
刪除空值(dropna函式)
填充空值(fillna函式)
用均值對空值進行填充
df4 = df['score'].fillna(df['score'].mean())
0 80.0
1 90.0
2 100.0
3 90.0
4 88.0
5 80.0
name: score, dtype: float64
更改資料格式
df1['score'].astype('int64')
0 80
1 90
2 100
3 90
5 80
name: score, dtype: int64
(注:如果存在空值,更改資料格式會報錯!)
更改列名
對列表內的值進行替換(replace函式)
df6 = df['name'].replace('bob', 'bob')
0 tom
1 jack
2 alan
3 tony
4 tim
5 bob
name: name, dtype: object
對資料進行排序
(注:預設公升序,且空值在後面)
資料分組
①單一條件分組
# 如果score列的值》=85,score列顯示high,否則顯示low
# group列為增加列
②多個條件分組
# 利用loc函式,進行多列查詢
# sign為增加列
df.loc[(df['***'] == 1) & (df['age']>= 19), 'sign']=1
按標籤提取(loc函式)
df.loc[0:3]
按位置進行提取(iloc函式)
①按區域提取
df.iloc[:4, :5]
②按位置提取
#[0, 2, 5] 代表指定的行,[0, 1, 5] 代表指定的列
df.iloc[[0, 2, 5],[0, 1, 5]]
按條件提取(isin與loc函式)
①用isin函式進行判斷
# 判斷***是否為1
df['***'].isin([1])
0 true
1 true
2 true
3 false
4 false
5 true
name: ***, dtype: bool
②用loc函式進行判斷
# ***為1,分數大於85
df1.loc[(df1['***'] == 1) & (df1['score'] > '85'), ['name','age','class']]
③先判斷結果,將結果為true的提取
# 先判斷score列裡是否包含80和90,然後將復合條件的資料提取出來。
df.loc[df['score'].isin(['80','90'])]
乾貨 pandas常用技巧筆記
下面以 注釋的形式進行記錄 為模組新增別名 import pandas as pd 建立dataframe df pd.read csv rfm trad flow.csv encoding gbk df pd.dataframe columns transid cumid time amount ...
pandas 時間處理
year month day 是 datetime 標準形式 可以用 datetime.dt.day 取到 day 如果是 datetime 相減,得到兩個時間差的天數,型別變為 timedelta 要用 dt.days 獲取天數 如果是一串數字表達的時間 沒有分隔符 可以用to datetime ...
pandas處理資料
pd.read csv path to file.txt header 0,names ab index 0 names columns這個可以不寫,制定索引列是第一列,這樣就沒有序號 np.tofile d python np.txt 類似於二維列表 充分利用map函式 df.a df.a.map...