pandas之DataFrame數據分析
2.DATAFRAME
dataframe是我們最常使用的數據結構,它含有一組有序的列,每一列可以是不同的類型
import numpy as np
import pandas as pd
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
"""
data: numpy ndarray(結構化或同類),dict或DataFrame,Dict可以包含Series,數組,常量或類似列表的對象
index: dataframe的索引,如果沒有自定義,則默認為RangeIndex(0,1,2,...,n)
columns:dataframe的列標簽,如果沒有自定義,則默認為RangeIndex(0,1,2,...,n)
dtype:默認None,要強制的數據類型。 只允許一個dtype
copy:boolean,默認為False
"""
創建DataFrame
df1 = pd.DataFrame(np.array([[10,20,25],[30,40,45]]))
print(df1)
"""
0 1 2
0 10 20 25
1 30 40 45
"""
df2 = pd.DataFrame([np.arange(1,8),np.arange(11,18)])
print(df2)
"""
0 1 2 3 4 5 6
0 1 2 3 4 5 6 7
1 11 12 13 14 15 16 17
"""
df1.df1.shape
"""
兩行三列
(2, 3)
"""
df3 = pd.DataFrame(np.array([[10,20,25],[30,40,45]]),index=("a","b"),columns=("c1","c2","c3"))
df3
"""
index: 行索引
columns:列標簽
c1 c2 c3
a 10 20 25
b 30 40 45
"""
df3.index
"""
取行索引
Index(['a', 'b'], dtype='object')
"""
df3.columns[0]
"""
取列標簽第一個
'c1'
"""
df3.columns = ["h1","h2","h3"]
df3
"""
修改列標簽
h1 h2 h3
a 10 20 25
b 30 40 45
"""
df4 = pd.DataFrame({'a':[1,2,3],'b':5})
df4
"""
a b
0 1 5
1 2 5
2 3 5
"""
l1 = pd.Series(np.arange(1,9,2))
l2 = pd.Series(np.arange(2,10,2))
l1
"""
1-9以2為間隔的Series數據
0 1
1 3
2 5
3 7
"""
df5 = pd.DataFrame({"a1":l1,"a2":l2})
df5
"""
a1 a2
0 1 2
1 3 4
2 5 6
3 7 8
"""
CSV中讀取數據
eu1 = pd.read_csv(r"C:\Users\Administrator\Desktop\csv_file.csv")
eu1
"""
文件數據
a b c d e f g h
0 1 11 112 1123 11234 112345 1123456 11234567
1 2 20 200 242 4453 5434 7867 3768324
2 2 30 300 8348 36738 786 45723 678
3 4 40 400 76867 76786 78678 3683 78
4 5 50 500 5543 42345 368736 38533 38763
5 6 60 600 6786 5675 767 464565 457
6 7 70 700 37417 3 38737 543737 37632
7 8 80 800 678 3453 7867 34537 38763
8 9 90 900 434537 7378 8 2137 378
9 10 100 1000 7378 7843 7678 78 3534
"""
eu1.head(3)
"""
head(3)顯示前3行數據,默認前5行
a b c d e f g h
0 1 11 112 1123 11234 112345 1123456 11234567
1 2 20 200 242 4453 5434 7867 3768324
2 2 30 300 8348 36738 786 45723 678
"""
eu12.tail(2)
"""
tail(2)顯示后兩行數據,默認后5行
a b c d e f g h
8 9 90 900 434537 7378 8 2137 378
9 10 100 1000 7378 7843 7678 78 3534
"""
len(eu1)
"""
eu1的數據條數(行)
10
"""
eu1.shape
"""
10行8列
(10,8)
"""
eu1.shape[0]
"""
10行
10
"""
eu1.shape[1]
"""
8列
8
"""
eu1.index
"""
起始:0, 結束:10,步長:1
RangeIndex(start=0, stop=10, step=1)
"""
DataFrame操作數據的行/列
1.使用 [ ] 運算符進行切片,按照索引能夠實現行選擇或列選擇或區塊選擇
# 行選擇 eu1[1:4] """ 1-3行的數據 a b c d e f g h 1 2 20 200 242 4453 5434 7867 3768324 2 2 30 300 8348 36738 786 45723 678 3 4 40 400 76867 76786 78678 3683 78 """ eu1.index.get_loc(0) """ eu1.index.get_loc('行標簽') 0標簽的索引 0 """列選擇
多列選擇,不能像行選擇時一樣使用num1:num2這樣的方法來選擇
eu1['b']
type(eu1['b'])
"""
標簽為bt的一列數據,Series類型
0 11
1 20
2 30
3 40
4 50
5 60
6 70
7 80
8 90
9 100
Name: b, dtype: int64pandas.core.series.Series
"""
eu1[['b']]
"""
標簽為b的一列數據,DataFrame類型
b
0 11
1 20
2 30
3 40
4 50
5 60
6 70
7 80
8 90
9 100
pandas.core.frame.DataFrame
"""
eu1[['a','b']]
"""
eu12[['開始列','結束列']]
a b
0 1 11
1 2 20
2 2 30
3 4 40
4 5 50
5 6 60
6 7 70
7 8 80
8 9 90
9 10 100
"""
eu1.columns.get_loc('a')
"""
eu1.columns.get_loc('a') a列的索引
0
"""
區塊選擇
eu1[2:4][['a','b']]
"""
獲取第2行第4行中,'a'和'b'列的值
a b
2 2 30
3 4 40
"""
2.使用 loc 按照索引(index)的值來進行行列選擇
# 行選擇 eu1.loc[2] type(eu1.loc[2]) """ 第2行的數據 a 2 b 30 c 300 d 8348 e 36738 f 786 g 45723 h 678 Name: 2, dtype: int64pandas.core.series.Series
"""
eu1.loc[[2]]
type(eu1.loc[[2]])
"""
第2行的數據
a b c d e f g h
2 2 30 300 8348 36738 786 45723 678
pandas.core.frame.DataFrame
"""
eu1.loc[1:2]
"""
1-2行的數據
a b c d e f g h
1 2 20 200 242 4453 5434 7867 3768324
2 2 30 300 8348 36738 786 45723 678
"""
列選擇
eu1.loc[1:2,['a','b']]
"""
數據基礎上去a,b列
a b
1 2 20
2 2 30
"""
只能去連續的塊選
eu1.loc[1:4,['a','b','c']]
"""
1-4行,'a','b','c'列
"""
3.使用 iloc 按照索引 (index) 的位置來進行選取
iloc全是以0開頭的行號和列號
# 行選擇
eu1.iloc[[2]]
"""
2行數據
a b c d e f g h
2 2 30 300 8348 36738 786 45723 678
"""
eu1.iloc[0:2]
"""
0-1行的數據
a b c d e f g h
0 1 11 112 1123 11234 112345 1123456 11234567
1 2 20 200 242 4453 5434 7867 3768324
"""
列選擇
eu1.iloc[0:2,[1,2]]
"""
0-1行中,列索引為1,2的數據
b c
0 11 112
1 20 200
"""
塊選擇
eu1.iloc[[1,2,4],[1,3]]
"""
1,2,4行; 1,3列
b d
1 20 242
2 30 8348
4 50 5543
"""
4.使用 .at[ ] 和 .iat[ ] 按標簽或位置進行標量查找(獲取某一行列的值)
at的使用方法與loc類似,但是比loc有更快的訪問數據的速度,但只能訪問單個元素,不能訪問多個元素
iat對于iloc的關系就像at對于loc的關系,是一種更快的基于索引位置的選擇方法,同at一樣只能訪問單個元素
eu1.at[2,'b']
"""
獲取第2行b列的元素
20
"""
eu1.iat[2,1]
"""
獲取第2行1列的元素
30
"""
5.使用 .ix[]
以上說過的幾種方法都要求查詢的秩在索引中,或者位置不超過長度范圍,而ix允許你得到不在DataFrame索引中的數據。
eu1.ix[1:12]
"""
數據只到9行
a b c d e f g h
1 2 20 200 242 4453 5434 7867 3768324
2 2 30 300 8348 36738 786 45723 678
3 4 40 400 76867 76786 78678 3683 78
4 5 50 500 5543 42345 368736 38533 38763
5 6 60 600 6786 5675 767 464565 457
6 7 70 700 37417 3 38737 543737 37632
7 8 80 800 678 3453 7867 34537 38763
8 9 90 900 434537 7378 8 2137 378
9 10 100 1000 7378 7843 7678 78 3534
"""
eu1.ix[[9,11]]
"""
a b c d e f g h
9 10.0 100.0 1000.0 7378.0 7843.0 7678.0 78.0 3534.0
11 NaN NaN NaN NaN NaN NaN NaN NaN
"""
a

浙公網安備 33010602011771號