pandas 基礎操作 更新
- 建立一個Series,同時讓pandas自動生成索引列
- 建立一個DataFrame資料框
- 檢視資料
- 資料的簡單統計
- 資料的排序
- 選擇資料(類似於資料庫中sql語句)
- 資料合併
- 分組操作Groupby操作
- reshape操作
- pivot_table 透視表
- 至此,pandas的基礎的使用介紹也就結束了,後續會有專題性質的分析,包括(字串處理,apply的使用,資料合併,透視表,時間序列的分析)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
建立一個Series,同時讓pandas自動生成索引列
s = pd.Series([1,3,5,np.nan,6,8])
# 檢視s s
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
建立一個DataFrame資料框
### 建立一個DataFrame ,可以傳入一個numpy array 可以自己構建索引以及列標
dates = pd.date_range('2018-11-01',periods=7)
#### 比如說生成一個時間序列,以20181101 為起始位置的,7個日期組成的時間序列,資料的型別為datetime64[ns]
dates
DatetimeIndex(['2018-11-01', '2018-11-02', '2018-11-03', '2018-11-04', '2018-11-05', '2018-11-06', '2018-11-07'], dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(7,4),index= dates,columns=list('ABCD'))
df
# 產生隨機正態分佈的資料,7行4列,分別對應的index的長度以及column的長度
A | B | C | D | |
---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 |
### 同時用可以使用dict的實行建立DataFrame
df2 = pd.DataFrame({"A":1,
"B":"20181101",
'C':np.array([3]*4,dtype='int32'),
'D':pd.Categorical(['test','train','test','train']),
"E":1.5},
)
df2
A | B | C | D | E | |
---|---|---|---|---|---|
0 | 1 | 20181101 | 3 | test | 1.5 |
1 | 1 | 20181101 | 3 | train | 1.5 |
2 | 1 | 20181101 | 3 | test | 1.5 |
3 | 1 | 20181101 | 3 | train | 1.5 |
df2.dtypes
### 檢視資料框中的資料型別,常見的資料型別還有時間型別以及float型別
A int64
B object
C int32
D category
E float64
dtype: object
檢視資料
# 比如說看前5行
df.head()
A | B | C | D | |
---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 |
# 後4行
df.tail(4)
A | B | C | D | |
---|---|---|---|---|
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 |
# 檢視DataFrame的索引
df.index
DatetimeIndex(['2018-11-01', '2018-11-02', '2018-11-03', '2018-11-04',
'2018-11-05', '2018-11-06', '2018-11-07'],
dtype='datetime64[ns]', freq='D')
# 檢視DataFrame的列索引
df.columns
Index(['A', 'B', 'C', 'D'], dtype='object')
# 檢視DataFrame的資料,將DataFrame轉化為numpy array 的資料形式
df.values
array([[-0.1703643 , -0.23754121, 0.52990284, 0.66007285],
[-0.15844565, -0.48853537, 0.08296043, -1.91357255],
[-0.51842554, 0.73086567, -1.03382969, 0.71262388],
[ 1.01352712, 0.27016714, 0.08180539, 0.17819344],
[-0.89749689, -0.01627937, -0.23499323, 0.08120819],
[-0.03058032, 0.54556063, 1.09112723, -0.13157934],
[-0.31334198, -0.68817881, -0.41775393, 0.85502652]])
資料的簡單統計
# 可以使用describe函式對DataFrame中的數值型資料進行統計
df.describe()
A | B | C | D | |
---|---|---|---|---|
count | 7.000000 | 7.000000 | 7.000000 | 7.000000 |
mean | -0.153590 | 0.016580 | 0.014174 | 0.063139 |
std | 0.590144 | 0.527860 | 0.680939 | 0.945526 |
min | -0.897497 | -0.688179 | -1.033830 | -1.913573 |
25% | -0.415884 | -0.363038 | -0.326374 | -0.025186 |
50% | -0.170364 | -0.016279 | 0.081805 | 0.178193 |
75% | -0.094513 | 0.407864 | 0.306432 | 0.686348 |
max | 1.013527 | 0.730866 | 1.091127 | 0.855027 |
df2.describe()
### 對於其他的資料型別的資料describe函式會自動過濾掉
A | C | E | |
---|---|---|---|
count | 4.0 | 4.0 | 4.0 |
mean | 1.0 | 3.0 | 1.5 |
std | 0.0 | 0.0 | 0.0 |
min | 1.0 | 3.0 | 1.5 |
25% | 1.0 | 3.0 | 1.5 |
50% | 1.0 | 3.0 | 1.5 |
75% | 1.0 | 3.0 | 1.5 |
max | 1.0 | 3.0 | 1.5 |
### DataFrame 的轉置,將列索引與行索引進行調換,行資料與列數進行調換
df.T
2018-11-01 00:00:00 | 2018-11-02 00:00:00 | 2018-11-03 00:00:00 | 2018-11-04 00:00:00 | 2018-11-05 00:00:00 | 2018-11-06 00:00:00 | 2018-11-07 00:00:00 | |
---|---|---|---|---|---|---|---|
A | -0.170364 | -0.158446 | -0.518426 | 1.013527 | -0.897497 | -0.030580 | -0.313342 |
B | -0.237541 | -0.488535 | 0.730866 | 0.270167 | -0.016279 | 0.545561 | -0.688179 |
C | 0.529903 | 0.082960 | -1.033830 | 0.081805 | -0.234993 | 1.091127 | -0.417754 |
D | 0.660073 | -1.913573 | 0.712624 | 0.178193 | 0.081208 | -0.131579 | 0.855027 |
df
A | B | C | D | |
---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 |
資料的排序
df.sort_index(ascending=False)
### 降序,按照列進行降序,通過該索引列
A | B | C | D | |
---|---|---|---|---|
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 |
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 |
print(df.sort_values(by=['B','A']))
# 預設是升序,可以選擇多指排序,先照B,後排A,如果B中的資料一樣,則按照A中的大小進行排序
df.sort_values(by='B')
A B C D
2018-11-07 -0.313342 -0.688179 -0.417754 0.855027
2018-11-02 -0.158446 -0.488535 0.082960 -1.913573
2018-11-01 -0.170364 -0.237541 0.529903 0.660073
2018-11-05 -0.897497 -0.016279 -0.234993 0.081208
2018-11-04 1.013527 0.270167 0.081805 0.178193
2018-11-06 -0.030580 0.545561 1.091127 -0.131579
2018-11-03 -0.518426 0.730866 -1.033830 0.712624
A | B | C | D | |
---|---|---|---|---|
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 |
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 |
選擇資料(類似於資料庫中sql語句)
df['A']
# 取出單獨的一列資料,等價於df.A
2018-11-01 -0.170364
2018-11-02 -0.158446
2018-11-03 -0.518426
2018-11-04 1.013527
2018-11-05 -0.897497
2018-11-06 -0.030580
2018-11-07 -0.313342
Freq: D, Name: A, dtype: float64
# 通過[]進行行選擇切片
df[0:3]
A | B | C | D | |
---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 |
# 同時對於時間索引而言,可以直接使用比如
df['2018-11-01':'2018-11-04']
A | B | C | D | |
---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
另外可以使用標籤來選擇
df.loc['2018-11-01']
A -0.170364
B -0.237541
C 0.529903
D 0.660073
Name: 2018-11-01 00:00:00, dtype: float64
#### 通過標籤來進行多個軸上的進行選擇
df.loc[:,["A","B"]] # 等價於df[["A","B"]]
A | B | |
---|---|---|
2018-11-01 | -0.170364 | -0.237541 |
2018-11-02 | -0.158446 | -0.488535 |
2018-11-03 | -0.518426 | 0.730866 |
2018-11-04 | 1.013527 | 0.270167 |
2018-11-05 | -0.897497 | -0.016279 |
2018-11-06 | -0.030580 | 0.545561 |
2018-11-07 | -0.313342 | -0.688179 |
df.loc["2018-11-01":"2018-11-03",["A","B"]]
A | B | |
---|---|---|
2018-11-01 | -0.170364 | -0.237541 |
2018-11-02 | -0.158446 | -0.488535 |
2018-11-03 | -0.518426 | 0.730866 |
#### 獲得一個標量資料
df.loc['2018-11-01','A']
-0.17036430076617162
通過位置獲取資料
df.iloc[3] # 獲得第四行的資料
A 1.013527
B 0.270167
C 0.081805
D 0.178193
Name: 2018-11-04 00:00:00, dtype: float64
df.iloc[1:3,1:4] # 與numpy中的ndarray類似
B | C | D | |
---|---|---|---|
2018-11-02 | -0.488535 | 0.08296 | -1.913573 |
2018-11-03 | 0.730866 | -1.03383 | 0.712624 |
# 可以選取不連續的行或者列進行取值
df.iloc[[1,3],[1,3]]
B | D | |
---|---|---|
2018-11-02 | -0.488535 | -1.913573 |
2018-11-04 | 0.270167 | 0.178193 |
# 對行進行切片處理
df.iloc[1:3,:]
A | B | C | D | |
---|---|---|---|---|
2018-11-02 | -0.158446 | -0.488535 | 0.08296 | -1.913573 |
2018-11-03 | -0.518426 | 0.730866 | -1.03383 | 0.712624 |
# 對列進行切片
df.iloc[:,1:4]
B | C | D | |
---|---|---|---|
2018-11-01 | -0.237541 | 0.529903 | 0.660073 |
2018-11-02 | -0.488535 | 0.082960 | -1.913573 |
2018-11-03 | 0.730866 | -1.033830 | 0.712624 |
2018-11-04 | 0.270167 | 0.081805 | 0.178193 |
2018-11-05 | -0.016279 | -0.234993 | 0.081208 |
2018-11-06 | 0.545561 | 1.091127 | -0.131579 |
2018-11-07 | -0.688179 | -0.417754 | 0.855027 |
# 獲取特定的值
df.iloc[1,3]
-1.9135725473596013
布林值索引
# 使用單列的資料作為條件進行篩選
df[df.A>0]
A | B | C | D | |
---|---|---|---|---|
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
#很少用到,很少使用這種大範圍的條件進行篩選
df[df>0]
A | B | C | D | |
---|---|---|---|---|
2018-11-01 | NaN | NaN | 0.529903 | 0.660073 |
2018-11-02 | NaN | NaN | 0.082960 | NaN |
2018-11-03 | NaN | 0.730866 | NaN | 0.712624 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 |
2018-11-05 | NaN | NaN | NaN | 0.081208 |
2018-11-06 | NaN | 0.545561 | 1.091127 | NaN |
2018-11-07 | NaN | NaN | NaN | 0.855027 |
# 使用isin()方法過濾
df2.head()
A | B | C | D | E | |
---|---|---|---|---|---|
0 | 1 | 20181101 | 3 | test | 1.5 |
1 | 1 | 20181101 | 3 | train | 1.5 |
2 | 1 | 20181101 | 3 | test | 1.5 |
3 | 1 | 20181101 | 3 | train | 1.5 |
df2[df2['D'].isin(['test'])]
A | B | C | D | E | |
---|---|---|---|---|---|
0 | 1 | 20181101 | 3 | test | 1.5 |
2 | 1 | 20181101 | 3 | test | 1.5 |
設定數值(類似於sql update 或者add)
- 設定一個新的列
df['E'] = [1,2,3,4,5,6,7]
df
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 | 1 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 | 2 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 | 3 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | 4 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 5 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 | 6 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 7 |
- 通過標籤設定新的值
df.loc['2018-11-01','E']= 10 # 第一行,E列的資料修改為10
df
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 | 10 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 | 2 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 | 3 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | 4 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 5 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 | 6 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 7 |
df.iloc[1,4]=5000 # 第二行第五列資料修改為5000
df
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 | 10 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 | 5000 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 | 3 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | 4 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 5 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 | 6 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 7 |
df3 =df.copy()
df3[df3<0]= -df3
df3 # 都變成非負數
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | 0.170364 | 0.237541 | 0.529903 | 0.660073 | 10 |
2018-11-02 | 0.158446 | 0.488535 | 0.082960 | 1.913573 | 5000 |
2018-11-03 | 0.518426 | 0.730866 | 1.033830 | 0.712624 | 3 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | 4 |
2018-11-05 | 0.897497 | 0.016279 | 0.234993 | 0.081208 | 5 |
2018-11-06 | 0.030580 | 0.545561 | 1.091127 | 0.131579 | 6 |
2018-11-07 | 0.313342 | 0.688179 | 0.417754 | 0.855027 | 7 |
缺失值處理
df
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 0.660073 | 10 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | -1.913573 | 5000 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 0.712624 | 3 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | 4 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 5 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 | 6 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 7 |
df['E']=[1,np.nan,2,np.nan,4,np.nan,6]
df.loc['2018-11-01':'2018-11-03','D']=np.nan
df
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | NaN | 1.0 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | NaN | NaN |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | NaN | 2.0 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | NaN |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 4.0 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 | NaN |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 6.0 |
- 去掉缺失值的行
df4 = df.copy()
df4.dropna(how='any')
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 4.0 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 6.0 |
df4.dropna(how='all')
# """DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)"""
# aixs 軸0或者1 index或者columns
# how 方式
# thresh 超過閾值個數的缺失值
# subset 那些欄位的處理
# inplace 是否直接在原資料框中的替換
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | NaN | 1.0 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | NaN | NaN |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | NaN | 2.0 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | NaN |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 4.0 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 | NaN |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 6.0 |
- 對缺失值就行填充
df4.fillna(1000)
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | 1000.000000 | 1.0 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | 1000.000000 | 1000.0 |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | 1000.000000 | 2.0 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | 1000.0 |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 4.0 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 | 1000.0 |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 6.0 |
- 對資料進行布林值進行填充
pd.isnull(df4)
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | False | False | False | True | False |
2018-11-02 | False | False | False | True | True |
2018-11-03 | False | False | False | True | False |
2018-11-04 | False | False | False | False | True |
2018-11-05 | False | False | False | False | False |
2018-11-06 | False | False | False | False | True |
2018-11-07 | False | False | False | False | False |
資料操作
#統計的工作一般情況下都不包含缺失值,
df4.mean()
# 預設是對列進行求平均,沿著行方向也就是axis=0
A -0.153590
B 0.016580
C 0.014174
D 0.245712
E 3.250000
dtype: float64
df4.mean(axis=1)
# 沿著列方向求每行的平均
2018-11-01 0.280499
2018-11-02 -0.188007
2018-11-03 0.294653
2018-11-04 0.385923
2018-11-05 0.586488
2018-11-06 0.368632
2018-11-07 1.087150
Freq: D, dtype: float64
# 對於擁有不同維度,需要對齊的物件進行操作。Pandas會自動的沿著指定的維度進行廣播:
s = pd.Series([1,3,4,np.nan,6,7,8],index=dates)
s
2018-11-01 1.0
2018-11-02 3.0
2018-11-03 4.0
2018-11-04 NaN
2018-11-05 6.0
2018-11-06 7.0
2018-11-07 8.0
Freq: D, dtype: float64
df4.sub(s,axis='index')
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -1.170364 | -1.237541 | -0.470097 | NaN | 0.0 |
2018-11-02 | -3.158446 | -3.488535 | -2.917040 | NaN | NaN |
2018-11-03 | -4.518426 | -3.269134 | -5.033830 | NaN | -2.0 |
2018-11-04 | NaN | NaN | NaN | NaN | NaN |
2018-11-05 | -6.897497 | -6.016279 | -6.234993 | -5.918792 | -2.0 |
2018-11-06 | -7.030580 | -6.454439 | -5.908873 | -7.131579 | NaN |
2018-11-07 | -8.313342 | -8.688179 | -8.417754 | -7.144973 | -2.0 |
df4
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | NaN | 1.0 |
2018-11-02 | -0.158446 | -0.488535 | 0.082960 | NaN | NaN |
2018-11-03 | -0.518426 | 0.730866 | -1.033830 | NaN | 2.0 |
2018-11-04 | 1.013527 | 0.270167 | 0.081805 | 0.178193 | NaN |
2018-11-05 | -0.897497 | -0.016279 | -0.234993 | 0.081208 | 4.0 |
2018-11-06 | -0.030580 | 0.545561 | 1.091127 | -0.131579 | NaN |
2018-11-07 | -0.313342 | -0.688179 | -0.417754 | 0.855027 | 6.0 |
df4.apply(np.cumsum)
A | B | C | D | E | |
---|---|---|---|---|---|
2018-11-01 | -0.170364 | -0.237541 | 0.529903 | NaN | 1.0 |
2018-11-02 | -0.328810 | -0.726077 | 0.612863 | NaN | NaN |
2018-11-03 | -0.847235 | 0.004789 | -0.420966 | NaN | 3.0 |
2018-11-04 | 0.166292 | 0.274956 | -0.339161 | 0.178193 | NaN |
2018-11-05 | -0.731205 | 0.258677 | -0.574154 | 0.259402 | 7.0 |
2018-11-06 | -0.761786 | 0.804237 | 0.516973 | 0.127822 | NaN |
2018-11-07 | -1.075128 | 0.116059 | 0.099219 | 0.982849 | 13.0 |
df4.apply(lambda x: x.max()-x.min())
A 1.911024
B 1.419044
C 2.124957
D 0.986606
E 5.000000
dtype: float64
統計個數與離散化
s = pd.Series(np.random.randint(0,7,size=15))
s
0 5
1 4
2 1
3 2
4 1
5 0
6 2
7 6
8 4
9 3
10 1
11 1
12 1
13 3
14 2
dtype: int32
s.value_counts()
# 統計元素的個數,並按照元素統計量進行排序,未出現的元素不會顯示出來
1 5
2 3
4 2
3 2
6 1
5 1
0 1
dtype: int64
s.reindex(range(0,7))
# 按照固定的順序輸出元素的個數統計
0 5
1 4
2 1
3 2
4 1
5 0
6 2
dtype: int32
s.mode()
# 眾數
0 1
dtype: int32
- 離散化
# 連續值轉化為離散值,可以使用cut函式進行操作(bins based on vlaues) qcut (bins based on sample
# quantiles) 函式
arr = np.random.randint(0,20,size=15) # 正態分佈
arr
array([ 5, 18, 13, 16, 16, 1, 15, 11, 0, 17, 16, 18, 15, 12, 13])
factor = pd.cut(arr,3)
factor
[(-0.018, 6.0], (12.0, 18.0], (12.0, 18.0], (12.0, 18.0], (12.0, 18.0], ..., (12.0, 18.0], (12.0, 18.0], (12.0, 18.0], (6.0, 12.0], (12.0, 18.0]]
Length: 15
Categories (3, interval[float64]): [(-0.018, 6.0] < (6.0, 12.0] < (12.0, 18.0]]
pd.value_counts(factor)
(12.0, 18.0] 10
(-0.018, 6.0] 3
(6.0, 12.0] 2
dtype: int64
factor1 = pd.cut(arr,[-1,5,10,15,20])
pd.value_counts(factor1)
(15, 20] 6
(10, 15] 6
(-1, 5] 3
(5, 10] 0
dtype: int64
factor2 = pd.qcut(arr,[0,0.25,0.5,0.75,1])
pd.value_counts(factor2)
(11.5, 15.0] 5
(-0.001, 11.5] 4
(16.0, 18.0] 3
(15.0, 16.0] 3
dtype: int64
pandas 處理字串(單獨一個大的章節,這人不做詳述)
資料合併
- concat
- merge(類似於sql資料庫中的join)
- append
首先看concat合併資料框
df = pd.DataFrame(np.random.randn(10,4)) # 10行列的標準正態分佈資料框
df
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 0.949746 | -0.050767 | 1.478622 | -0.239901 |
1 | -0.297120 | -0.562589 | 0.371837 | 1.180715 |
2 | 0.953856 | 0.492295 | 0.821156 | -0.323328 |
3 | 0.016153 | 1.554225 | -1.166304 | -0.904040 |
4 | 0.204763 | -0.951291 | -1.317620 | 0.672900 |
5 | 2.241006 | -0.925746 | -1.961408 | 0.853367 |
6 | 2.217133 | -0.430812 | 0.518926 | 1.741445 |
7 | -0.571104 | -0.437305 | -0.902241 | 0.786231 |
8 | -2.511387 | 0.523760 | 1.811622 | -0.777296 |
9 | 0.252690 | 0.901952 | 0.619614 | -0.006631 |
d1,d2,d3 = df[:3],df[3:7],df[7:]
d1,d2,d3
( 0 1 2 3
0 0.949746 -0.050767 1.478622 -0.239901
1 -0.297120 -0.562589 0.371837 1.180715
2 0.953856 0.492295 0.821156 -0.323328,
0 1 2 3
3 0.016153 1.554225 -1.166304 -0.904040
4 0.204763 -0.951291 -1.317620 0.672900
5 2.241006 -0.925746 -1.961408 0.853367
6 2.217133 -0.430812 0.518926 1.741445,
0 1 2 3
7 -0.571104 -0.437305 -0.902241 0.786231
8 -2.511387 0.523760 1.811622 -0.777296
9 0.252690 0.901952 0.619614 -0.006631)
pd.concat([d1,d2,d3])
#合併三個資料框,資料結構相同,通常合併相同結構的資料,資料框中的欄位一致,類似於資料新增新的資料來源
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 0.949746 | -0.050767 | 1.478622 | -0.239901 |
1 | -0.297120 | -0.562589 | 0.371837 | 1.180715 |
2 | 0.953856 | 0.492295 | 0.821156 | -0.323328 |
3 | 0.016153 | 1.554225 | -1.166304 | -0.904040 |
4 | 0.204763 | -0.951291 | -1.317620 | 0.672900 |
5 | 2.241006 | -0.925746 | -1.961408 | 0.853367 |
6 | 2.217133 | -0.430812 | 0.518926 | 1.741445 |
7 | -0.571104 | -0.437305 | -0.902241 | 0.786231 |
8 | -2.511387 | 0.523760 | 1.811622 | -0.777296 |
9 | 0.252690 | 0.901952 | 0.619614 | -0.006631 |
merge方式合併(資料庫中的join)
left = pd.DataFrame({'key':['foo','foo'],"lval":[1,2]})
right = pd.DataFrame({'key':['foo','foo'],'rval':[4,5]})
left
key | lval | |
---|---|---|
0 | foo | 1 |
1 | foo | 2 |
right
key | rval | |
---|---|---|
0 | foo | 4 |
1 | foo | 5 |
pd.merge(left,right,on='key')
key | lval | rval | |
---|---|---|---|
0 | foo | 1 | 4 |
1 | foo | 1 | 5 |
2 | foo | 2 | 4 |
3 | foo | 2 | 5 |
left = pd.DataFrame({'key':['foo','bar'],"lval":[1,2]})
right = pd.DataFrame({'key':['foo','bar'],'rval':[4,5]})
pd.merge(left,right,on='key')
key | lval | rval | |
---|---|---|---|
0 | foo | 1 | 4 |
1 | bar | 2 | 5 |
left
key | lval | |
---|---|---|
0 | foo | 1 |
1 | bar | 2 |
right
key | rval | |
---|---|---|
0 | foo | 4 |
1 | bar | 5 |
相關推薦
pandas 基礎操作 更新
建立一個Series,同時讓pandas自動生成索引列
建立一個DataFrame資料框
檢視資料
資料的簡單統計
資料的排序
選擇資料(類似於資料庫中sql語句)
另外可以使用標籤來選擇
通過位置獲取資料
布林值索引
設定數值(類似於sql
pandas基礎操作
pandasimport pandas as pd1、定義一個字典data = {‘sales_volume‘: [100, 123, 446, 233, 456], ‘month‘: [‘1月‘, ‘2月‘, ‘3月‘, ‘4月‘, ‘5月‘] , ‘product_id‘: [‘1112‘,
【python資料處理】pandas基礎操作
基礎操作
1.建立表
dataframe 類似於csv 與SQL表
方法1
import codecademylib
import pandas as pd
df1 = pd.DataFrame({
'Product ID': [1, 2
pandas網頁操作基礎
出現的次數 note 隨機 合並 app 復制 最小 與運算 notebook ipython notebook
命令行輸入ipython notebook
此時,瀏覽器會自動運行並打開ipython網頁
基本操作
如上圖所示,新建一個項目
導入相
《Pandas CookBook》---- DataFrame基礎操作
vertical stat dir vertica expr axis int avi joseph Pandas基礎操作
簡書大神SeanCheney的譯作,我作了些格式調整和文章目錄結構的變化,更適合自己閱讀,以後翻閱是更加方便自己查找吧
import pandas a
重灌ubuntu16.04之後的基礎操作(介面美觀+安裝瀏覽器+更新軟體源+安裝ROS)
1.介面美觀
1.安裝 Numix 主題和圖示
sudo apt-get install unity-tweak-tool sudo add-apt-repository ppa:numix/ppa sudo apt-get update
2.安裝Unity Tweak T
MySQL的基礎操作:(不斷更新中)
2018年11月08日 19:44:31
yubinquanjxd
閱讀數:7
標籤:
基礎
linux基礎操作記錄...持續更新
df -ah df 檢視磁碟情況主要是這兩個引數,-a表示所有磁碟,-h表示以人類讀懂方式顯示大小
du -sh *顯示當前目錄下各資料夾大小。 -s表示計算大小,-h表示通俗方式顯示, *表示遍歷當前目錄
ps -A 顯示所有程序
ps -ef 顯示所有程序資訊,
[Rcode]資料框的基礎操作【不定期更新】
一 資料的篩選與處理
1 新增新的一列,把連續型變數(如身高)轉化為類別型變數
data$height[data$height>=3]<-NA #把異常值重新編碼為缺失值data<-within(data,{ heightcat&l
Pandas:DataFrame物件的基礎操作
DataFrame物件的建立,修改,合併
import pandas as pd
import numpy as np
建立DataFrame物件
# 建立DataFrame物件
df
HIVE基礎操作(命令,表,資料匯出匯入等)--持續更新
1.show databases;
2.show tables;
3.show tables in 資料庫名;(不在對應資料庫下可查到想要的表名)
4.show tables in hive 'tom*'; 查詢在hive資料庫下,tom開頭的表名。
5.desc extended tablenam
利用Python進行資料分析(15) pandas基礎: 字串操作
字串物件方法
split()方法拆分字串:
strip()方法去掉空白符和換行符:
split()結合strip()使用:
"+"符號可以將多個字串連線起來:
join()方法也是連線字串,比較它和"+"符號的區別:
in關鍵字判斷一個字串是否包含在另一個字串中:
index()方法
小白學 Python 資料分析(5):Pandas (四)基礎操作(1)檢視資料
在家為國家做貢獻太無聊,不如跟我一起學點 Python
人生苦短,我用 Python
前文傳送門:
小白學 Python 資料分析(1):資料分析基礎
小白學 Python 資料分析(2):Pandas (一)概述
小白學 Python 資料分析(3):Pandas (二)資料結構 Series
小白學 Python 資料分析(6):Pandas (五)基礎操作(2)資料選擇
人生苦短,我用 Python
前文傳送門:
小白學 Python 資料分析(1):資料分析基礎
小白學 Python 資料分析(2):Pandas (一)概述
小白學 Python 資料分析(3):Pandas (二)資料結構 Series
小白學 Python 資料分析(4):Pandas (三)資
python基礎操作_方法(函數)
形參 num 變參 可變參數 int 聲明 args 是個 如果 #函數,方法#普通方法def hello(): print(‘hello‘)hello()#帶形參的方法def hello1(name): print(‘hello%s‘%name)hello1(
python基礎操作_集合_三元運算
它的 seek discard enc lin run section 寫法 操作文件 #使用操作文件的時候,可以使用with函數#with open(‘E:\info.txt‘,‘a+‘) as fr#fr這個值可以是任意值# :#for line in fr:‘‘‘wi
Python Day2 基礎 操作文件流
font -a 方式 復制 定義 count 較高的 pri 字典 1.列表、元組 操作 推薦書籍 追風箏的人 白鹿原
python列表基礎操作
rem tle 我想 pop pri 技術分享 接下來 pan 列表 Python列表基本操作
記住一句話,叫做顧首不顧尾
首先我們來定義一個列表
name = ["jixuege","dajiba","boduoye","cangjinkong","youtianai"]
python數據處理:pandas基礎
log eat ges 處理 保留 sed lang sce rop 本文資料來源:
Python for Data Anylysis: Chapter 5
10 mintues to pandas: http://pandas.pydata.org/pandas-
MATLAB基礎操作
oot 乘法 polyval per city 操作 12px 計算 obi 生成全排列:perms(1:5);
取整:floor(a);
生成隨機矩陣:rand(x,y)%n+m;%生成x行,y列的矩陣大小為(m,n);
多項式求解:
假設多項式系數為:p=[1 15
pandas 基礎操作 更新
建立一個Series,同時讓pandas自動生成索引列 建立一個DataFrame資料框 檢視資料 資料的簡單統計 資料的排序 選擇資料(類似於資料庫中sql語句) 另外可以使用標籤來選擇 通過位置獲取資料 布林值索引 設定數值(類似於sql
pandas基礎操作
pandasimport pandas as pd1、定義一個字典data = {‘sales_volume‘: [100, 123, 446, 233, 456], ‘month‘: [‘1月‘, ‘2月‘, ‘3月‘, ‘4月‘, ‘5月‘] , ‘product_id‘: [‘1112‘,
【python資料處理】pandas基礎操作
基礎操作 1.建立表 dataframe 類似於csv 與SQL表 方法1 import codecademylib import pandas as pd df1 = pd.DataFrame({ 'Product ID': [1, 2
pandas網頁操作基礎
出現的次數 note 隨機 合並 app 復制 最小 與運算 notebook ipython notebook 命令行輸入ipython notebook 此時,瀏覽器會自動運行並打開ipython網頁 基本操作 如上圖所示,新建一個項目 導入相
《Pandas CookBook》---- DataFrame基礎操作
vertical stat dir vertica expr axis int avi joseph Pandas基礎操作 簡書大神SeanCheney的譯作,我作了些格式調整和文章目錄結構的變化,更適合自己閱讀,以後翻閱是更加方便自己查找吧 import pandas a
重灌ubuntu16.04之後的基礎操作(介面美觀+安裝瀏覽器+更新軟體源+安裝ROS)
1.介面美觀 1.安裝 Numix 主題和圖示 sudo apt-get install unity-tweak-tool sudo add-apt-repository ppa:numix/ppa sudo apt-get update 2.安裝Unity Tweak T
MySQL的基礎操作:(不斷更新中)
2018年11月08日 19:44:31 yubinquanjxd 閱讀數:7 標籤: 基礎
linux基礎操作記錄...持續更新
df -ah df 檢視磁碟情況主要是這兩個引數,-a表示所有磁碟,-h表示以人類讀懂方式顯示大小 du -sh *顯示當前目錄下各資料夾大小。 -s表示計算大小,-h表示通俗方式顯示, *表示遍歷當前目錄 ps -A 顯示所有程序 ps -ef 顯示所有程序資訊,
[Rcode]資料框的基礎操作【不定期更新】
一 資料的篩選與處理 1 新增新的一列,把連續型變數(如身高)轉化為類別型變數 data$height[data$height>=3]<-NA #把異常值重新編碼為缺失值data<-within(data,{ heightcat&l
Pandas:DataFrame物件的基礎操作
DataFrame物件的建立,修改,合併 import pandas as pd import numpy as np 建立DataFrame物件 # 建立DataFrame物件 df
HIVE基礎操作(命令,表,資料匯出匯入等)--持續更新
1.show databases; 2.show tables; 3.show tables in 資料庫名;(不在對應資料庫下可查到想要的表名) 4.show tables in hive 'tom*'; 查詢在hive資料庫下,tom開頭的表名。 5.desc extended tablenam
利用Python進行資料分析(15) pandas基礎: 字串操作
字串物件方法 split()方法拆分字串: strip()方法去掉空白符和換行符: split()結合strip()使用: "+"符號可以將多個字串連線起來: join()方法也是連線字串,比較它和"+"符號的區別: in關鍵字判斷一個字串是否包含在另一個字串中: index()方法
小白學 Python 資料分析(5):Pandas (四)基礎操作(1)檢視資料
在家為國家做貢獻太無聊,不如跟我一起學點 Python 人生苦短,我用 Python 前文傳送門: 小白學 Python 資料分析(1):資料分析基礎 小白學 Python 資料分析(2):Pandas (一)概述 小白學 Python 資料分析(3):Pandas (二)資料結構 Series
小白學 Python 資料分析(6):Pandas (五)基礎操作(2)資料選擇
人生苦短,我用 Python 前文傳送門: 小白學 Python 資料分析(1):資料分析基礎 小白學 Python 資料分析(2):Pandas (一)概述 小白學 Python 資料分析(3):Pandas (二)資料結構 Series 小白學 Python 資料分析(4):Pandas (三)資
python基礎操作_方法(函數)
形參 num 變參 可變參數 int 聲明 args 是個 如果 #函數,方法#普通方法def hello(): print(‘hello‘)hello()#帶形參的方法def hello1(name): print(‘hello%s‘%name)hello1(
python基礎操作_集合_三元運算
它的 seek discard enc lin run section 寫法 操作文件 #使用操作文件的時候,可以使用with函數#with open(‘E:\info.txt‘,‘a+‘) as fr#fr這個值可以是任意值# :#for line in fr:‘‘‘wi
Python Day2 基礎 操作文件流
font -a 方式 復制 定義 count 較高的 pri 字典 1.列表、元組 操作 推薦書籍 追風箏的人 白鹿原
python列表基礎操作
rem tle 我想 pop pri 技術分享 接下來 pan 列表 Python列表基本操作 記住一句話,叫做顧首不顧尾 首先我們來定義一個列表 name = ["jixuege","dajiba","boduoye","cangjinkong","youtianai"]
python數據處理:pandas基礎
log eat ges 處理 保留 sed lang sce rop 本文資料來源: Python for Data Anylysis: Chapter 5 10 mintues to pandas: http://pandas.pydata.org/pandas-
MATLAB基礎操作
oot 乘法 polyval per city 操作 12px 計算 obi 生成全排列:perms(1:5); 取整:floor(a); 生成隨機矩陣:rand(x,y)%n+m;%生成x行,y列的矩陣大小為(m,n); 多項式求解: 假設多項式系數為:p=[1 15