pandas基础学习
库的导入
函数 | 说明 |
---|---|
df | 任意的pandas DataFrame(数据框)对象 |
s | 任意的pandas Series(数组)对象 |
pandas和numpy是用Python做数据分析最基础且最核心的库
import pandas as pd # 导入pandas库并简写为pd
import numpy as np # 导入numpy库并简写为np
数据的导入
函数 | 说明 |
---|---|
pd.read_csv(filename) | 导入csv格式文件中的数据 |
pd.read_table(filename) | 导入有分隔符的文本 (如TSV) 中的数据 |
pd.read_excel(filename) | 导入Excel格式文件中的数据 |
pd.read_sql(query, connection_object) | 导入SQL数据表/数据库中的数据 |
pd.read_json(json_string) | 导入JSON格式的字符,URL地址或者文件中的数据 |
pd.read_html(url) | 导入经过解析的URL地址中包含的数据框 (DataFrame) 数据 |
pd.read_clipboard() | 导入系统粘贴板里面的数据 |
pd.DataFrame(dict) | 导入Python字典 (dict) 里面的数据,其中key是数据框的表头,value是数据框的内容。 |
数据的导出
函数 | 说明 |
---|---|
df.to_csv(filename) | 将数据框 (DataFrame)中的数据导入csv格式的文件中 |
df.to_excel(filename) | 将数据框 (DataFrame)中的数据导入Excel格式的文件中 |
df.to_sql(table_name,connection_object) | 将数据框 (DataFrame)中的数据导入SQL数据表/数据库中 |
df.to_json(filename) | 将数据框 (DataFrame)中的数据导入JSON格式的文件中 |
创建对象
创建一个5列10行的由随机浮点数组成的数据框 DataFrame
pd.DataFrame(np.random.rand(10,5))
从一个可迭代的对象 my_list 中创建一个数据组
my_list = ['Kesci',100,'欢迎来到科赛网']
pd.Series(my_list)
'''
0 Kesci
1 100
2 欢迎来到科赛网
dtype: object
'''
添加一个日期索引 index
df = pd.DataFrame(np.random.rand(10,5))
df.index = pd.date_range('2017/1/1', periods=df.shape[0])
df
数据的查看与检查
查看数据框的前n行
df = pd.DataFrame(np.random.rand(10,5))
df.head(3)
查看数据框的最后n行
df = pd.DataFrame(np.random.rand(10,5))
df.tail(3)
查看数据框的行数与列数
df = pd.DataFrame(np.random.rand(10,5))
df.shape
查看数据框 (DataFrame) 的索引、数据类型及内存信息
df = pd.DataFrame(np.random.rand(10,5))
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 5 columns):
0 10 non-null float64
1 10 non-null float64
2 10 non-null float64
3 10 non-null float64
4 10 non-null float64
dtypes: float64(5)
memory usage: 480.0 bytes
'''
对于数据类型为数值型的列,查询其描述性统计的内容
df.describe()
查询每个独特数据值出现次数统计
s = pd.Series([1,2,3,3,4,np.nan,5,5,5,6,7])
s.value_counts(dropna=False)
'''
5.0 3
3.0 2
7.0 1
6.0 1
NaN 1
4.0 1
2.0 1
1.0 1
dtype: int64
'''
查询数据框 (Data Frame) 中每个列的独特数据值出现次数统计
df.apply(pd.Series.value_counts)
数据的选取
以数组 Series 的形式返回选取的列
df = pd.DataFrame(np.random.rand(5,5),columns=list('ABCDE'))
df['C']
’‘’
0 0.720965
1 0.360155
2 0.474067
3 0.116206
4 0.774503
Name: C, dtype: float64
‘’‘
以新的数据框(DataFrame)的形式返回选取的列
df = pd.DataFrame(np.random.rand(5,5),columns=list('ABCDE'))
df[['B','E']]
'''
B E
0 0.205912 0.333909
1 0.475620 0.540206
2 0.144041 0.065117
3 0.636970 0.406317
4 0.451541 0.944245
'''
按照位置选取
s = pd.Series(np.array(['I','Love','Data']))
s.iloc[0]
'''
'I'
'''
按照索引选取
s = pd.Series(np.array(['I','Love','Data']))
s.loc[1]
'''
'Love'
'''
选取第一行
df = pd.DataFrame(np.random.rand(5,5),columns=list('ABCDE'))
df.iloc[0,:]
'''
A 0.234156
B 0.513754
C 0.593067
D 0.856575
E 0.291528
Name: 0, dtype: float64
'''
选取第一行的第一个元素
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.iloc[0,0]
'''
0.91525996455410763
'''
数据的清洗
重命名数据框的列名称
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
'C':'foo'})
df.columns = ['a','b','c']
df
'''
a b c
0 1.0 NaN foo
1 NaN 4.0 foo
2 2.0 NaN foo
3 3.0 5.0 foo
4 6.0 9.0 foo
5 NaN NaN foo
'''
检查数据中空值出现的情况,并返回一个由布尔值(True,Fale)组成的列
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
'C':'foo'})
pd.isnull(df)\
'''
A B C
0 False True False
1 True False False
2 False True False
3 False False False
4 False False False
5 True True False
'''
检查数据中非空值出现的情况,并返回一个由布尔值(True,False)组成的列
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
'C':'foo'})
pd.notnull(df)
'''
A B C
0 True False True
1 False True True
2 True False True
3 True True True
4 True True True
5 False False True
'''
移除数据框 DataFrame 中包含空值的行
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
'C':'foo'})
df.dropna()
'''
A B C
3 3.0 5.0 foo
4 6.0 9.0 foo
'''
移除数据框 DataFrame 中包含空值的列
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
'C':'foo'})
df.dropna(axis=1)
'''
C
0 foo
1 foo
2 foo
3 foo
4 foo
5 foo
'''
保留含有若干非空值的行或者列可以使用thresh参数
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
'C':'foo'})
test = df.dropna(axis=1,thresh=1)
test
'''
A B C
0 1.0 NaN foo
1 NaN 4.0 foo
2 2.0 NaN foo
3 3.0 5.0 foo
4 6.0 9.0 foo
5 NaN NaN foo
'''
将数据框 DataFrame 中的所有空值替换为 x
df = pd.DataFrame({'A':np.array([1,np.nan,2,3,6,np.nan]),
'B':np.array([np.nan,4,np.nan,5,9,np.nan]),
'C':'foo'})
df.fillna('Test')
'''
A B C
0 1 Test foo
1 Test 4 foo
2 2 Test foo
3 3 5 foo
4 6 9 foo
5 Test Test foo
'''
将所有空值替换为平均值
s = pd.Series([1,3,5,np.nan,7,9,9])
s.fillna(s.mean())
'''
0 1.000000
1 3.000000
2 5.000000
3 5.666667
4 7.000000
5 9.000000
6 9.000000
dtype: float64
'''
将数组(Series)的格式转化为浮点数
s = pd.Series([1,3,5,np.nan,7,9,9])
s.astype(float)
'''
0 1.0
1 3.0
2 5.0
3 NaN
4 7.0
5 9.0
6 9.0
dtype: float64
'''
将数组(Series)中的所有1替换为’one’
s = pd.Series([1,3,5,np.nan,7,9,9])
s.replace(1,'one')
'''
0 one
1 3
2 5
3 NaN
4 7
5 9
6 9
dtype: object
'''
将数组(Series)中所有的1替换为’one’, 所有的3替换为’three’
s = pd.Series([1,3,5,np.nan,7,9,9])
s.replace([1,3],['one','three'])
'''
0 one
1 three
2 5
3 NaN
4 7
5 9
6 9
dtype: object
'''
将全体列重命名
f = pd.DataFrame(np.random.rand(4,4))
df.rename(columns=lambda x: x+ 2)
将选择的列重命名
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.rename(columns={'A':'newA','C':'newC'})
'''
newA B newC D E
0 0.169072 0.694563 0.069313 0.637560 0.475181
1 0.910271 0.800067 0.676448 0.934767 0.025608
2 0.825186 0.451545 0.135421 0.635303 0.419758
3 0.401979 0.510304 0.014901 0.209211 0.121889
4 0.579282 0.001947 0.036519 0.750415 0.453078
5 0.896213 0.557514 0.028147 0.527471 0.575772
6 0.443222 0.095459 0.319582 0.912069 0.781455
7 0.067923 0.590470 0.602999 0.507358 0.703022
8 0.301491 0.682629 0.283103 0.565754 0.089268
9 0.399671 0.925416 0.020578 0.278000 0.591522
'''
改变索引
df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.set_index('B')
'''
A C D E
B
0.311742 0.972069 0.557977 0.114267 0.795128
0.931644 0.725425 0.082130 0.993764 0.136923
0.206382 0.980647 0.947041 0.038841 0.879139
0.157801 0.402233 0.249151 0.724130 0.108238
0.314238 0.341221 0.512180 0.218882 0.046379
0.029040 0.470619 0.666784 0.036655 0.823498
0.843928 0.779437 0.926912 0.189213 0.624111
0.282773 0.993681 0.048483 0.135934 0.576662
0.759600 0.235513 0.359139 0.488255 0.669043
0.088552 0.893269 0.277296 0.889523 0.398392
'''
改变全体索引
df = pd.DataFrame(np.random.rand(10,5))
df.rename(index = lambda x: x+ 1)
'''
0 1 2 3 4
1 0.386542 0.031932 0.963200 0.790339 0.602533
2 0.053492 0.652174 0.889465 0.465296 0.843528
3 0.411836 0.460788 0.110352 0.083247 0.389855
4 0.336156 0.830522 0.560991 0.667896 0.233841
5 0.307933 0.995207 0.506680 0.957895 0.636461
6 0.724975 0.842118 0.123139 0.244357 0.803936
7 0.059176 0.117784 0.330192 0.418764 0.464144
8 0.104323 0.222367 0.930414 0.659232 0.562155
9 0.484089 0.024045 0.879834 0.492231 0.949636
10 0.201583 0.280658 0.356804 0.890706 0.236174
'''