Python数据分析pandas入门------十分钟入门pandas
Posted Geek_bao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据分析pandas入门------十分钟入门pandas相关的知识,希望对你有一定的参考价值。
Python数据分析基础
一、导入常用库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
二、创建对象
(1)通过传递一个list来创建Series,pandas会默认创建整型索引
代码如下:
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
运行结果如下:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
说明:Series:一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。注意:Series中的索引值是可以重复的。
(2)通过传递一个numpy array,日期索引以及列标签来创建一个DataFrame
代码如下:
dates = pd.date_range('20210101', periods=6)
print(dates)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)
运行结果如下:
DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
'2021-01-05', '2021-01-06'],
dtype='datetime64[ns]', freq='D')
A B C D
2021-01-01 0.332594 1.151379 0.155028 1.914757
2021-01-02 1.681969 -1.157997 0.340231 2.054462
2021-01-03 -1.351239 -0.636244 -1.670505 -0.577896
2021-01-04 1.091745 -0.265513 -0.585511 0.462430
2021-01-05 -0.945369 -0.416703 -0.833535 0.446753
2021-01-06 0.712920 0.223502 -1.158448 0.046709
(3)通过传递一个能够被转换为类似series的dict对象来创建一个DataFrame
代码如下:
df2 = pd.DataFrame({'A': 1.,
'B': pd.Timestamp('20200629'),
'C': pd.Series(1, index=list(range(4)), dtype='float32'),
'D': np.array([3]*4, dtype='int32'),
'E': pd.Categorical(["test", "train", "test", "train"]),
'F': 'foo'})
print(df2)
print(df2.dtypes)
运行结果如下:
A B C D E F
0 1.0 2020-06-29 1.0 3 test foo
1 1.0 2020-06-29 1.0 3 train foo
2 1.0 2020-06-29 1.0 3 test foo
3 1.0 2020-06-29 1.0 3 train foo
A float64
B datetime64[ns]
C float32
D int32
E category
F object
dtype: object
三、查看数据
(1)查看frame中头部和尾部的几行
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.head()) # 查看头部几行
print(df.tail(3)) # 查看尾部几行
运行结果如下:
A B C D
2021-01-01 -0.854651 -0.610823 -0.167534 0.792160
2021-01-02 0.493142 0.580007 0.204097 -0.461438
2021-01-03 0.281382 -1.412539 3.594873 -0.130037
2021-01-04 -0.020957 0.013987 -2.404149 -0.277812
2021-01-05 -1.464734 0.144639 -0.667339 0.917941
A B C D
2021-01-04 -0.020957 0.013987 -2.404149 -0.277812
2021-01-05 -1.464734 0.144639 -0.667339 0.917941
2021-01-06 1.813891 -1.379392 -1.490363 -0.954958
(2)显示索引、列名以及底层的numpy数据
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.index) # 显示索引
print(df.columns) # 显示列名
print(df.values) # 底层numpy数据
运行结果如下:
DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
'2021-01-05', '2021-01-06'],
dtype='datetime64[ns]', freq='D')
Index(['A', 'B', 'C', 'D'], dtype='object')
[[ 0.54760061 -1.52821104 0.98156267 -1.3086871 ]
[ 1.08947302 -0.27957116 -0.99159702 0.56656625]
[-0.56661193 0.73175369 0.84474106 -0.01924194]
[ 0.40981963 -1.23025219 1.31332923 1.16469658]
[-0.0996665 0.42960539 0.15250292 0.5774405 ]
[-0.05484658 0.70352716 0.88048923 1.0268004 ]]
(3)describe()能对数据做一个快速统计汇总
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.describe()) # 快速统计汇总
运行结果如下:
A B C D
count 6.000000 6.000000 6.000000 6.000000
mean -0.037825 -0.684544 0.074748 -0.393371
std 1.221381 0.651434 0.445844 1.016243
min -1.638185 -1.327833 -0.581986 -1.639139
25% -0.866597 -1.061551 -0.204719 -1.129647
50% -0.116033 -0.838348 0.128008 -0.347528
75% 0.977540 -0.567642 0.455081 0.123801
max 1.418020 0.510622 0.525979 1.083412
(4)对数据做转置
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.T) # 对数据做转置
运行结果如下:
2021-01-01 2021-01-02 2021-01-03 2021-01-04 2021-01-05 2021-01-06
A -0.924087 1.036039 2.380802 0.396621 -1.344227 -0.060524
B -1.223318 1.818642 -1.659037 0.440670 -2.068355 0.660393
C 0.028661 -0.739622 -0.702494 0.767255 -0.027886 0.712692
D -0.352344 1.421342 -0.915466 0.192375 1.665294 -0.865071
(5)按轴进行排序
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.sort_index(axis=1, ascending=False)) # 按轴进行排序
运行结果如下:
D C B A
2021-01-01 0.147621 0.372596 0.403472 -1.462936
2021-01-02 -0.433823 -0.649770 -1.840609 -0.191425
2021-01-03 0.279578 1.917370 0.931369 -0.226179
2021-01-04 1.420825 1.596096 -1.250926 0.597007
2021-01-05 0.928866 0.465932 -1.089402 -0.060359
2021-01-06 0.175272 -0.152957 0.535680 1.290633
(5)按值进行排序
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.sort_values(by='B')) # 按值进行排序
运行结果如下:
A B C D
2021-01-02 1.103506 -0.595645 0.666151 1.309689
2021-01-03 0.021516 -0.091451 0.024281 -0.598654
2021-01-01 -1.565367 0.163802 0.425172 -2.247528
2021-01-05 3.003356 0.336145 -1.738533 -0.084639
2021-01-04 0.699287 0.706519 0.891762 -1.278873
2021-01-06 0.987927 1.177693 -0.741832 1.223762
注意:虽然标准的Python/Numpy的表达式能完成选择与赋值等功能,但我们仍推荐使用优化过的pandas数据访问方法:.at,.iat,.loc,.iloc和.ix
四、选取
(1)选择某一列数据,它会返回一个Series,等同于df.A
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.A)
运行结果如下:
2021-01-01 -0.111543
2021-01-02 -0.656968
2021-01-03 -0.688010
2021-01-04 -1.589676
2021-01-05 -0.678847
2021-01-06 2.115350
Freq: D, Name: A, dtype: float64
(2)通过使用[]进行切片选取
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df[0:3])
print(df['20210102':'20210104'])
运行结果如下:
A B C D
2021-01-01 -0.047732 0.552092 -0.729498 -0.714394
2021-01-02 0.591364 -1.105802 -0.762140 -0.612312
2021-01-03 -0.065074 -0.839530 -1.497781 0.126298
A B C D
2021-01-02 0.738849 -1.043999 -0.521313 -0.224035
2021-01-03 0.111772 -1.778993 2.102982 0.245293
2021-01-04 0.715842 0.664216 0.229961 -1.134740
五、通过标签选取
(1)通过标签进行交叉选取
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 通过标签进行交叉选取
print(df.loc[dates[0]])
运行结果如下:
A 0.419647
B -0.213496
C -0.247529
D -1.832256
Name: 2021-01-01 00:00:00, dtype: float64
(2)使用标签对多个轴进行选取
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 使用标签对多个轴进行选取
print(df.loc[:, ['A', 'B']])
print(df.loc[:, ['A', 'B']][:3])
运行结果如下:
A B
2021-01-01 2.682915 -0.914341
2021-01-02 0.583982 0.282933
2021-01-03 -0.191259 0.195227
2021-01-04 -1.560690 0.035329
2021-01-05 -1.130526 2.553366
2021-01-06 -0.021148 0.385572
A B
2021-01-01 2.682915 -0.914341
2021-01-02 0.583982 0.282933
2021-01-03 -0.191259 0.195227
(3)进行标签切片,包含两个端点
代码如下:
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 进行标签切片,包含两个端点
print(df.loc['20210102':'20210104', ['A', 'B']])
运行结果如下:
A B
2021-01Pandas高级数据分析快速入门之一——Python开发环境篇