pandas是经常和其他数值计算的工具,numpy和scipy,以及数据可视化工具matplotlib,seabon等一起使用的。pandas支持大部分numpy语言的风格的数组计算,尤其数组函数以及没有for循环的各种数据处理。 尽管pandas采用了很多numpy的代码风格,但是最大的不同是pandas用来处理表格型或者异质性数据的。而numpy相反,更适合处理同质性的数值类数组数据。 Series是一种以为的数组型对象,包含了一个值序列(和numpy中的类型相似),并且包含数据标签,称之为索引(index)。最简单的序列可以有一个数组形成。 对于一个Series,其中最常用的属性为值(values),索引(index),名字(name),类型(dtype) 创建一个Series out: 访问Series属性 调用方法 DataFrame表示的是矩阵的数据表,他包含已经排序的列集合,每一列可以是不同的值类型(数值,字符串,布尔值等)。 out: 从DataFrame取出一列为Series 调用属性和方法 索引对齐特性 列的删除与添加 pop方法直接在原来的DataFrame上操作,且返回被删除的列,与python中的pop函数类似 可以直接增加新的列,也可以使用assign方法 但assign方法不会对原DataFrame做修改 根据类型选择列 将Series转换为DataFrame 使用T符号可以转置 可以指定n参数显示多少行 nunique显示有多少个唯一值 unique显示所有的唯一值 count返回非缺失值元素个数 value_counts返回每个元素有多少个 info函数返回有哪些列、有多少非缺失值、每列的类型 describe默认统计数值型数据的各个统计量 可以自行选择分位数 对于非数值型也可以用describe函数 idxmax函数返回最大值,在某些情况下特别适用,idxmin功能类似 nlargest函数返回前几个大的元素值,nsmallest功能类似 replace是对某些值进行替换 通过字典,可以直接在表中修改 对于Series,它可以迭代每一列的值操作: 对于DataFrame,它可以迭代每一个列操作: 多个值排序,即先对第一层排,在第一层相同的情况下对第二层排序目录
1.简介
2. 文件读写
2.1读取
#csv格式 df = pd.read_csv('data/table.csv') df.head()
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
0
S_1
C_1
1101
M
street_1
173
63
34.0
1
S_1
C_1
1102
F
street_2
192
73
32.5
2
S_1
C_1
1103
M
street_2
186
82
87.2
3
S_1
C_1
1104
F
street_2
167
81
80.4
4
S_1
C_1
1105
F
street_4
159
64
84.8
#txt格式 df_txt = pd.read_table('data/table.txt') #可设置sep分隔符参数 df_txt
col1
col2
col3
col4
0
2
a
1.4
apple
1
3
b
3.4
banana
2
6
c
2.5
orange
3
5
d
3.2
lemon
#xlsx格式 #需要安装xlrd包 df_excel = pd.read_excel('data/table.xlsx') df_excel.head()
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
0
S_1
C_1
1101
M
street_1
173
63
34.0
A+
1
S_1
C_1
1102
F
street_2
192
73
32.5
B+
2
S_1
C_1
1103
M
street_2
186
82
87.2
B+
3
S_1
C_1
1104
F
street_2
167
81
80.4
B-
4
S_1
C_1
1105
F
street_4
159
64
84.8
B+
2.2 写入
df.to_csv('data/new_table.csv') #df.to_csv('data/new_table.csv', index=False) #保存时除去行索引
#需要安装openpyxl df.to_excel('data/new_table2.xlsx', sheet_name='Sheet1')
2.3 pandas数据结构
2.3.1 Series
import pandas as pd s = pd.Series(np.random.randn(5),index=['a','b','c','d','e'],name='这是一个Series',dtype='float64') s
a 0.302995 b 0.573438 c 0.536086 d 0.513209 e -1.263579 Name: 这是一个Series, dtype: float64
s.values
array([ 0.30299458, 0.57343774, 0.53608608, 0.5132085 , -1.26357851])
s.name
'这是一个Series'
s.index
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
s.dtype
dtype('float64')
print([attr for attr in dir(s) if not attr.startswith('_')])
['T', 'a', 'abs', 'add', 'add_prefix', 'add_suffix', 'agg', 'aggregate', 'align', 'all', 'any', 'append', 'apply', 'argmax', 'argmin', 'argsort', 'array', 'asfreq', 'asof', 'astype', 'at', 'at_time', 'attrs', 'autocorr', 'axes', 'b', 'between', 'between_time', 'bfill', 'bool', 'c', 'clip', 'combine', 'combine_first', 'convert_dtypes', 'copy', 'corr', 'count', 'cov', 'cummax', 'cummin', 'cumprod', 'cumsum', 'd', 'describe', 'diff', 'div', 'divide', 'divmod', 'dot', 'drop', 'drop_duplicates', 'droplevel', 'dropna', 'dtype', 'dtypes', 'duplicated', 'e', 'empty', 'eq', 'equals', 'ewm', 'expanding', 'explode', 'factorize', 'ffill', 'fillna', 'filter', 'first', 'first_valid_index', 'floordiv', 'ge', 'get', 'groupby', 'gt', 'hasnans', 'head', 'hist', 'iat', 'idxmax', 'idxmin', 'iloc', 'index', 'infer_objects', 'interpolate', 'is_monotonic', 'is_monotonic_decreasing', 'is_monotonic_increasing', 'is_unique', 'isin', 'isna', 'isnull', 'item', 'items', 'iteritems', 'keys', 'kurt', 'kurtosis', 'last', 'last_valid_index', 'le', 'loc', 'lt', 'mad', 'map', 'mask', 'max', 'mean', 'median', 'memory_usage', 'min', 'mod', 'mode', 'mul', 'multiply', 'name', 'nbytes', 'ndim', 'ne', 'nlargest', 'notna', 'notnull', 'nsmallest', 'nunique', 'pct_change', 'pipe', 'plot', 'pop', 'pow', 'prod', 'product', 'quantile', 'radd', 'rank', 'ravel', 'rdiv', 'rdivmod', 'reindex', 'reindex_like', 'rename', 'rename_axis', 'reorder_levels', 'repeat', 'replace', 'resample', 'reset_index', 'rfloordiv', 'rmod', 'rmul', 'rolling', 'round', 'rpow', 'rsub', 'rtruediv', 'sample', 'searchsorted', 'sem', 'set_axis', 'shape', 'shift', 'size', 'skew', 'slice_shift', 'sort_index', 'sort_values', 'squeeze', 'std', 'sub', 'subtract', 'sum', 'swapaxes', 'swaplevel', 'tail', 'take', 'to_clipboard', 'to_csv', 'to_dict', 'to_excel', 'to_frame', 'to_hdf', 'to_json', 'to_latex', 'to_list', 'to_markdown', 'to_numpy', 'to_period', 'to_pickle', 'to_sql', 'to_string', 'to_timestamp', 'to_xarray', 'transform', 'transpose', 'truediv', 'truncate', 'tshift', 'tz_convert', 'tz_localize', 'unique', 'unstack', 'update', 'value_counts', 'values', 'var', 'view', 'where', 'xs']
2.3.2DataFrame
DataFrame既有行索引,也有列索引,他可以被视为一个共享相同索引的Series的字典。在DataFrame中,数据被存储为一个以上的二维块,而不是列表,字典或者其他的一维数组的集合。
可以通过包括等长的Numpy数组的字典来形成DataFrame:data={'first':['a','a','a','b','b','b'], 'second':[1,2,3,1,2,3], 'third':[1.1,2.1,3.1,1.2,2.2,3.2]} frame=pd.DataFrame(data) frame
first
second
third
0
a
1
1.1
1
a
2
2.1
2
a
3
3.1
3
b
1
1.2
4
b
2
2.2
5
b
3
3.2
frame['first']
0 a 1 a 2 a 3 b 4 b 5 b Name: first, dtype: object
type(frame)
pandas.core.frame.DataFrame
type(df['first'])
pandas.core.series.Series
frame.index frame.columns frame.values frame.shape frame.mean
<bound method DataFrame.mean of first second third 0 a 1 1.1 1 a 2 2.1 2 a 3 3.1 3 b 1 1.2 4 b 2 2.2 5 b 3 3.2>
这是Pandas中非常强大的特性,不理解这一特性有时就会造成一些麻烦df1 = pd.DataFrame({'A':[1,2,3]},index=[1,2,3]) df2 = pd.DataFrame({'A':[1,2,3]},index=[3,1,2]) df1-df2 #由于索引对齐,因此结果不是0
A
1
-1
2
-1
3
对于删除而言,可以使用drop函数或del或popdf.drop(index='五',columns='col1') #设置inplace=True后会直接在原DataFrame中改动
col2
col3
一
5
1.3
二
6
2.5
三
7
3.6
四
8
4.6
df['col1']=[1,2,3,4,5] del df['col1'] df
col2
col3
一
5
1.3
二
6
2.5
三
7
3.6
四
8
4.6
五
9
5.8
df['col1']=[1,2,3,4,5] df.pop('col1')
一 1 二 2 三 3 四 4 五 5 Name: col1, dtype: int64 ```python df
col2
col3
一
5
1.3
二
6
2.5
三
7
3.6
四
8
4.6
五
9
5.8
df1['B']=list('abc') df1
A
B
C
1
1
a
e
2
2
b
f
3
3
c
NaN
df1
A
B
1
1
a
2
2
b
3
3
c
df.select_dtypes(include=['number']).head()
col3
一
1.3
二
2.5
三
3.6
四
4.6
五
5.8
s = df.mean() s.name='to_DataFrame' s
col2 7.00 col3 3.56 Name: to_DataFrame, dtype: float64
s.to_frame()
to_DataFrame
col2
7.00
col3
3.56
col2
col3
to_DataFrame
7.0
3.56
3.常用基本函数
df = pd.read_csv('data/table.csv')
3.1. head和tail
df.head()
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
0
S_1
C_1
1101
M
street_1
173
63
34.0
A+
1
S_1
C_1
1102
F
street_2
192
73
32.5
B+
2
S_1
C_1
1103
M
street_2
186
82
87.2
B+
3
S_1
C_1
1104
F
street_2
167
81
80.4
B-
4
S_1
C_1
1105
F
street_4
159
64
84.8
B+
df.tail()
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
30
S_2
C_4
2401
F
street_2
192
62
45.3
A
31
S_2
C_4
2402
M
street_7
166
82
48.7
B
32
S_2
C_4
2403
F
street_6
158
60
59.7
B+
33
S_2
C_4
2404
F
street_2
160
84
67.7
B
34
S_2
C_4
2405
F
street_6
193
54
47.6
B
df.head(3)
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
0
S_1
C_1
1101
M
street_1
173
63
34.0
A+
1
S_1
C_1
1102
F
street_2
192
73
32.5
B+
2
S_1
C_1
1103
M
street_2
186
82
87.2
B+
3.2 unique和nunique
df['Physics'].nunique()
7
df['Physics'].unique()
array(['A+', 'B+', 'B-', 'A-', 'B', 'A', 'C'], dtype=object)
3.3 count和value_counts
df['Physics'].count()
35
df['Physics'].value_counts()
B+ 9 B 8 B- 6 A 4 A+ 3 A- 3 C 2 Name: Physics, dtype: int64
3.4 describe和info
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 35 entries, 0 to 34 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 School 35 non-null object 1 Class 35 non-null object 2 ID 35 non-null int64 3 Gender 35 non-null object 4 Address 35 non-null object 5 Height 35 non-null int64 6 Weight 35 non-null int64 7 Math 35 non-null float64 8 Physics 35 non-null object dtypes: float64(1), int64(3), object(5) memory usage: 2.6+ KB
df.describe()
ID
Height
Weight
Math
count
35.00000
35.000000
35.000000
35.000000
mean
1803.00000
174.142857
74.657143
61.351429
std
536.87741
13.541098
12.895377
19.915164
min
1101.00000
155.000000
53.000000
31.500000
25%
1204.50000
161.000000
63.000000
47.400000
50%
2103.00000
173.000000
74.000000
61.700000
75%
2301.50000
187.500000
82.000000
77.100000
max
2405.00000
195.000000
100.000000
97.000000
df.describe(percentiles=[.05, .25, .75, .95])
ID
Height
Weight
Math
count
35.00000
35.000000
35.000000
35.000000
mean
1803.00000
174.142857
74.657143
61.351429
std
536.87741
13.541098
12.895377
19.915164
min
1101.00000
155.000000
53.000000
31.500000
5%
1102.70000
157.000000
56.100000
32.640000
25%
1204.50000
161.000000
63.000000
47.400000
50%
2103.00000
173.000000
74.000000
61.700000
75%
2301.50000
187.500000
82.000000
77.100000
95%
2403.30000
193.300000
97.600000
90.040000
max
2405.00000
195.000000
100.000000
97.000000
df['Physics'].describe()
count 35 unique 7 top B+ freq 9 Name: Physics, dtype: object
3.5 idxmax和nlargest
df['Math'].idxmax()
5
df['Math'].nlargest(3)
5 97.0 28 95.5 11 87.7 Name: Math, dtype: float64
3.6 clip和replace
df['Math'].head()
0 34.0 1 32.5 2 87.2 3 80.4 4 84.8 Name: Math, dtype: float64
df['Math'].clip(33,80).head()
0 34.0 1 33.0 2 80.0 3 80.0 4 80.0 Name: Math, dtype: float64
df['Math'].mad()
16.924244897959188
df['Address'].head()
0 street_1 1 street_2 2 street_2 3 street_2 4 street_4 Name: Address, dtype: object
df['Address'].replace(['street_1','street_2'],['one','two']).head()
0 one 1 two 2 two 3 two 4 street_4 Name: Address, dtype: object
df.replace({'Address':{'street_1':'one','street_2':'two'}}).head()
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
0
S_1
C_1
1101
M
one
173
63
34.0
A+
1
S_1
C_1
1102
F
two
192
73
32.5
B+
2
S_1
C_1
1103
M
two
186
82
87.2
B+
3
S_1
C_1
1104
F
two
167
81
80.4
B-
4
S_1
C_1
1105
F
street_4
159
64
84.8
B+
3.7 apply函数
df['Math'].apply(lambda x:str(x)+'!').head() #可以使用lambda表达式,也可以使用函数
0 34.0! 1 32.5! 2 87.2! 3 80.4! 4 84.8! Name: Math, dtype: object
df.apply(lambda x:x.apply(lambda x:str(x)+'!')).head() #这是一个稍显复杂的例子,有利于理解apply的功能
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
0
S_1!
C_1!
1101!
M!
street_1!
173!
63!
34.0!
1
S_1!
C_1!
1102!
F!
street_2!
192!
73!
32.5!
2
S_1!
C_1!
1103!
M!
street_2!
186!
82!
87.2!
3
S_1!
C_1!
1104!
F!
street_2!
167!
81!
80.4!
4
S_1!
C_1!
1105!
F!
street_4!
159!
64!
84.8!
4.排序
4.1索引排序
df.set_index('Math').head()
School
Class
ID
Gender
Address
Height
Weight
Physics
Math
34.0
S_1
C_1
1101
M
street_1
173
63
A+
32.5
S_1
C_1
1102
F
street_2
192
73
B+
87.2
S_1
C_1
1103
M
street_2
186
82
B+
80.4
S_1
C_1
1104
F
street_2
167
81
B-
84.8
S_1
C_1
1105
F
street_4
159
64
B+
df.set_index('Math').sort_index().head() #可以设置ascending参数,默认为升序,True
School
Class
ID
Gender
Address
Height
Weight
Physics
Math
31.5
S_1
C_3
1301
M
street_4
161
68
B+
32.5
S_1
C_1
1102
F
street_2
192
73
B+
32.7
S_2
C_3
2302
M
street_5
171
88
A
33.8
S_1
C_2
1204
F
street_5
162
63
B
34.0
S_1
C_1
1101
M
street_1
173
63
A+
4.2 值排序
df.sort_values(by='Class').head()
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
0
S_1
C_1
1101
M
street_1
173
63
34.0
19
S_2
C_1
2105
M
street_4
170
81
34.2
18
S_2
C_1
2104
F
street_5
159
97
72.2
16
S_2
C_1
2102
F
street_6
161
61
50.6
15
S_2
C_1
2101
M
street_7
174
84
83.3
df.sort_values(by=['Address','Height']).head()
School
Class
ID
Gender
Address
Height
Weight
Math
Physics
0
S_1
C_1
1101
M
street_1
173
63
34.0
A+
11
S_1
C_3
1302
F
street_1
175
57
87.7
A-
23
S_2
C_2
2204
M
street_1
175
74
47.2
B-
33
S_2
C_4
2404
F
street_2
160
84
67.7
B
3
S_1
C_1
1104
F
street_2
167
81
80.4
B-
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算