# Dataframe是一個表格型的數據結構,“帶有標簽的二維數組”。
# Dataframe帶有index(行標簽)和columns(列標簽)
#DateFrame簡介
import numpy as np
import pandas as pd
date = {'a':[1,2,3,4],'b':[4,5,6,7],'c':[2,3,4,5]}
df = pd.DataFrame(date)
print(df)
print(df.index)
print(df.columns)
print(df.values)
# .index查看行標簽
# .columns查看列標簽
# .values查看值,數據類型為ndarray
a b c
0 1 4 2
1 2 5 3
2 3 6 4
3 4 7 5
RangeIndex(start=0, stop=4, step=1)
Index(['a', 'b', 'c'], dtype='object')
[[1 4 2]
[2 5 3]
[3 6 4]
[4 7 5]]
# DateFrame的五種創建方法
#一:字典的值為列表或數組
data1 = {'a':[1,2,3],
'b':[3,4,5],
'c':[5,6,7]}
data2 = {'one':np.random.rand(3),
'two':np.random.rand(3)} # 這里如果嘗試 'two':np.random.rand(4) 會報錯
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(df1)
print(df2)
# #columns為字典key,index為默認數字標簽
# 由數組/list組成的字典 創建Dataframe,
# 字典的值的長度必須保持一致!
df3 = pd.DataFrame(data1,columns=['c','b','a','d'])
df4 = pd.DataFrame(data1,columns=['b','c'])
print(df3)
print(df4)
#clomuns參數可以重新調整列的位置,沒有的用NaN補充,少了就不要了
df5 = pd.DataFrame(data2,index=['A','B','C'])
print(df5)
#index參數重新設置行名,長度必須和原列長度相等
# df5 = pd.DataFrame(data2,index=['A','B','C','D'])這種寫法會報錯
a b c
0 1 3 5
1 2 4 6
2 3 5 7
one two
0 0.882151 0.095418
1 0.792190 0.753419
2 0.314997 0.841665
c b a d
0 5 3 1 NaN
1 6 4 2 NaN
2 7 5 3 NaN
b c
0 3 5
1 4 6
2 5 7
one two
A 0.882151 0.095418
B 0.792190 0.753419
C 0.314997 0.841665
# 二:由Series組成的字典
dic = {'a':pd.Series(np.random.rand(3),index=list('ABC')),'b':pd.Series(np.random.rand(4),index=list('ABCD'))}
df = pd.DataFrame(dic)
print(df)
# 由Seris組成的字典 創建Dataframe,columns為字典key,index為Series的標簽(如果Series沒有指定標簽,則是默認數字標簽)
# 兩個Series可以長度不一樣,生成的Dataframe會出現NaN值,但每個index的長度必須匹配,,注意:這一特點與值為列表的情況不同
a b
A 0.030423 0.549796
B 0.693748 0.609371
C 0.568017 0.623722
D NaN 0.806268
#三:Dataframe 創建方法三:通過二維數組直接創建
nd = np.random.rand(12).reshape(3,4)
df = pd.DataFrame(nd,index=list('abc'),columns=list('ABCD'))
print(df)
# 通過二維數組直接創建Dataframe,得到一樣形狀的結果數據,如果不指定index和columns,兩者均返回默認數字格式
# index和colunms指定長度與原數組保持一致
A B C D
a 0.794797 0.508300 0.204213 0.191891
b 0.539616 0.693174 0.954507 0.420008
c 0.909683 0.326935 0.257751 0.582809
#四:由字典組成的列表創建
data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data, index = ['a','b']) #index的長度匹配
df3 = pd.DataFrame(data, columns = ['one','two'])
print(df1)
print(df2)
print(df3)
# 由字典組成的列表創建Dataframe,columns為字典的key,index不做指定則為默認數組標簽
# colunms和index參數分別重新指定相應列及行標簽
one two three
0 1 2 NaN
1 5 10 20.0
one two three
a 1 2 NaN
b 5 10 20.0
one two
0 1 2
1 5 10
# 五:由字典組成的字典創建
data = {'Jack':{'math':90,'english':89,'art':78},
'Marry':{'math':82,'english':95,'art':92},
'Tom':{'math':78,'english':67}}
df1 = pd.DataFrame(data)
print(df1)
# 由字典組成的字典創建Dataframe,columns為字典的key,index為子字典的key
df2 = pd.DataFrame(data, columns = ['Jack','Tom','Bob']) #列可多可少
df3 = pd.DataFrame(data, index = ['art','math','english','d']) #行也可多可少
print(df2)
print(df3)
# columns參數可以增加和減少現有列,如出現新的列,值為NaN
# index在這里和之前不同,並不能改變原有index,如果指向新的標簽,值為NaN (非常重要!)
Jack Marry Tom
math 90 82 78.0
english 89 95 67.0
art 78 92 NaN
Jack Tom Bob
math 90 78.0 NaN
english 89 67.0 NaN
art 78 NaN NaN
Jack Marry Tom
art 78.0 92.0 NaN
math 90.0 82.0 78.0
english 89.0 95.0 67.0
d NaN NaN NaN