数据分析核心包 - pandas

数据分析核心包 - pandas

pandas简介

pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的。

pandas的主要功能

  具备对其功能的数据结构DataFrame,Series

  集成时间序列功能

  提供丰富的数学运作和操作

  灵活处理缺失数据

安装方法:pip install pandas

引用方法:import pandas as pd

1,Series

1,Series - 一维数据对象

Series是一种类似于一位数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。

创建方式:

sr0 = pd.Series([4, 7, -5, 3])
sr1 = pd.Series([4, 7, -5, 3], index = ['a', 'b', 'c', 'd'])  # 自设索引,依然可以通过数字索引进行访问
sr3 = pd.Series({'a': 1, 'b':2})
sr4 = pd.Series(0, index = ['a', 'b', 'c', 'd'])  # 通过字典创建标签

获取值数组和索引数组:values属性和index属性

Series表较像列表(数组)和字典的结合体

2,Series - 使用特性

 
Series支持array的特性(下标) Series支持字典的特性(标签)
从ndarry创建Series Series(arr) 从字典创建Series Series(dic)
与标量运算 sr*2 in运算 'a' in sr
两个Series运算 sr1+sr2 键索引 sr['a'], sr[['a', 'b', 'd']]
索引 sr[0], sr[[1,2,4]]    
切片 sr[0:2]    
通用函数 np.abs(sr)    
布尔值过滤 sr[sr>0]    

 示例:

In [13]: sr = pd.Series([2,3,4,5],index = ['a','b','c','d'])   # 可以另设置索引。

In [14]: sr.index
Out[14]: Index(['a', 'b', 'c', 'd'], dtype='object')  # 打印索引

In [15]: for i in sr:
    ...:     print(i)
    ...:

3,Series - 整数索引

例如:

sr = pd.Series(np.arange(4.))
sr[-1]

如果索引使整数类型,则根据整数进行下标获取值时总是面向标签的。

解决方法:loc属性(将索引解释为标签)和iloc属性(将索引解释为下标)

4,Series - 数据对齐

##例
sr1 = pd.Series([12, 23, 34],index = ['c', 'a', 'd'])
sr2 = pd.Series([11, 20, 10],index = ['d', 'c', 'a'])
sr1 + sr2

①pandas在进行两个Series对象的运算时,会按索引进行对齐然后计算。

②如果两个Series对象的索引不完全相同,则结果的索引是两个操作数索引的并集。

    如果只有一个对象在某索引下有值,则结果中该索引的值为nan(缺失值)

③如何使结果在索引'b'处的值为11,在索引'd'处的值为34?

  灵活的算术方法:add, sub, div, mul

  sr1.add(sr2,fill_value = 0)

5,Series - 缺失数据

①缺失数据:使用NaN(Not a Number)来表示缺失数据。其值等于np.nan。内置的None值也会被当作NaN处理。

②处理缺失数据的相关方法:

dropna()  # 过滤掉值为NaN的行
fillna()     # 填充缺失的数据
isnull()     # 返回布尔数组,缺失值对应为True
notnull()  # 返回布尔数组,缺失值对应为False

③过滤缺失数据:sr.dropna() 或 sr[data.natnull()]

④填充缺失数据:fillna(0)

2,DataFrame

1,DataFrame-二维数据对象

DataFrame是一个表格型的数据结构,含有一组有序的列。DataFrame可以被看做是由Series组成的字典,并且共用一个索引。

创建方式:

pd.DataFrame({'one':[1, 2, 3, 4],'two':[4, 3, 2, 1]})
pd.DataFrame({'one':pd.Series([1, 2, 3], index = ['a', 'b', 'c']),
'two':pd.Series([1, 2, 3, 4], index = ['b', 'a', 'c', 'd'])}) ...

csv文件读取与写入:

df.read_csv('filename.csv')
df.to_csv()

2,DataFrame - 常用属性

DataFrame常用属性
index 获取索引
T 转置
columns 获取列索引
values 获取值数组
describe() 获取快速统计

3,DataFrame - 索引和切片

DataFrame是一个二维数据类型,所以有行索引和列索引

DataFrame同样可以通过标签和位置两种方法进行索引和切片

loc(标签)属性和iloc(下标)属性:

  使用方法:逗号隔开,前面是行索引,后面是列索引

  行/列索引部分可以是常规索引,切片,布尔值索引,花式索引任意搭配

In [89]: df
Out[89]:
   one  two
a  1.0    2
b  2.0    1
c  3.0    3
d  NaN    4

In [90]: df['one']['a']   # 此处先选列,后选行。
Out[90]: 1.0

# 标签或者下标选取

# 标签选取
In [91]: df.loc['a','one']  # 先行后列,推荐使用该方式。
Out[91]: 1.0

# 可以单独查看列,不能单独查看行
# 实现方式:该格式相当于每一列为一个series,然后多个series拼接在一起,故此。
In [93]: df['one']
Out[93]:
a    1.0
b    2.0
c    3.0
d    NaN
Name: one, dtype: float64

# 单独查看行方式:
In [96]: df.loc['a',:]  # 行通过a,列通过分号选择所有的列。
Out[96]:
one    1.0
two    2.0
Name: a, dtype: float64

In [97]: df.loc[['a','c'],:]
Out[97]:
one two
a 1.0 2
c 3.0 3

4,DataFrame数据对齐与缺失数据

DataFrame对象在运算时,同样会进行数据对齐,其行索引和列索引分别对齐。

DataFrame处理缺失数据的相关方法:

dropna(axis = 0,where = 'any',...)  # axis=0代表往跨行(down),而axis=1代表跨列(across)
fillna()
isnull()
notnull()

①详解axis

axis=0代表往跨行(down),而axis=1代表跨列(across)

轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的方向垂直往下,第1轴沿着列的方向水平延伸

In [125]: df
Out[125]:
two one
c NaN 4
d 2.0 5
b 3.0 6
a 4.0 7

In [126]: df.dropna(axis = 1)  # 删除存在nan值的列。axis = 1时表示纵轴,也即列。
Out[126]:
one
c 4
d 5
b 6
a 7

In [127]: df.dropna(axis = 0)  # 删除存在nan值的行。axis = 0时表示横轴,也即行。
Out[127]:
two one
d 2.0 5
b 3.0 6
a 4.0 7

②数据对齐:

In [97]: df
Out[97]:
   one  two
a  1.0    2
b  2.0    1
c  3.0    3
d  NaN    4

In [98]: df = pd.DataFrame({'two':[1,2,3,4],'one':[4,5,6,7]},index = ['c','d','b','a'])

In [99]: df2 = _95

In [100]: df
Out[100]:
   two  one
c    1    4
d    2    5
b    3    6
a    4    7

In [101]: df2
Out[101]:
   one  two
a  1.0    2
b  2.0    1
c  3.0    3
d  NaN    4

In [102]: df + df2
Out[102]:
   one  two
a  8.0    6
b  8.0    4
c  7.0    4
d  NaN    6

③处理数据缺失相关方法示例:

In [103]: df2
Out[103]:
   one  two
a  1.0    2
b  2.0    1
c  3.0    3
d  NaN    4

In [104]: df2.fillna(0)
Out[104]:
   one  two
a  1.0    2
b  2.0    1
c  3.0    3
d  0.0    4

In [105]: df2.dropna()  # 默认处理方法,若有缺失值,则删掉该行。
Out[105]:
   one  two
a  1.0    2
b  2.0    1
c  3.0    3

In [106]: df2.isnull()
Out[106]:
     one    two
a  False  False
b  False  False
c  False  False
d   True  False

In [107]: df2.notnull()
Out[107]:
     one   two
a   True  True
b   True  True
c   True  True
d  False  True

④dropna其他情况用法:

In [117]: df2
Out[117]:
   one  two
a  1.0  2.0
b  2.0  1.0
c  3.0  3.0
d  NaN  4.0

In [118]: df2.loc['c',:] = np.nan

In [119]: df2
Out[119]:
   one  two
a  1.0  2.0
b  2.0  1.0
c  NaN  NaN
d  NaN  4.0

In [120]: df2.dropna(how = 'all')  # 删除数据全是nan的行
Out[120]:
   one  two
a  1.0  2.0
b  2.0  1.0
d  NaN  4.0

In [121]: df2.dropna(how = 'any')  # 删除数据有nan的行
Out[121]:
   one  two
a  1.0  2.0
b  2.0  1.0

In [125]: df
Out[125]:
two one
c NaN 4
d 2.0 5
b 3.0 6
a 4.0 7

In [126]: df.dropna(axis = 1)  # 删除存在nan值的列。axis = 1时表示纵轴,也即列。
Out[126]:
one
c 4
d 5
b 6
a 7

In [127]: df.dropna(axis = 0)  # 删除存在nan值的行。axis = 0时表示横轴,也即行。
Out[127]:
two one
d 2.0 5
b 3.0 6
a 4.0 7

3,pandas其他常用对象

1,pandas - 其他常用方法

NumPy的通用函数同样适用于pandas

pandas - 其他常用方法
mean(axis = 0,skipna = False) 对列(行)求平均值
sum(axis = 1) 对列(行)求和
sort_index(axis, ..., ascending) 对列(行)索引排序
sort_values(by, axis, ascending) 按某一列(行)的值排序
apply(func, axis = 0)

将自定义函数应用在各行或者列上,

func可返回标量或者Series

applymap(func) 将函数应用在DataFrame各个元素上
map(func) 将函数应用在Series各个元素上

①求平均值求和代码示例

In [125]: df
Out[125]:
   two  one
c  NaN    4
d  2.0    5
b  3.0    6
a  4.0    7

# 求平均值
# 因为DataFrame对象有两列,所以mean方法返回的是长度为2的series对象。
In [129]: df.mean()  # 默认以行显示求每一列的平均值
Out[129]:
two    3.0
one    5.5
dtype: float64

In [130]: df.mean(axis = 1)  # 当加入参数axis = 1时,表示跨列计算显示每一行的平均值
Out[130]:
c    4.0
d    3.5
b    4.5
a    5.5
dtype: float64

# 求和
In [131]: df.sum()  # 默认求每一列的平均值
Out[131]:
two     9.0
one    22.0
dtype: float64

In [133]: df.sum(axis = 1)  # 跨列计算显示每一行的和。
Out[133]:
c     4.0
d     7.0
b     9.0
a    11.0
dtype: float64

②排序

In [134]: df  
Out[134]:
   two  one
c  NaN    4
d  2.0    5
b  3.0    6
a  4.0    7

# 排序

In [135]: df.sort_values(by = 'two')  # 按照某一列来排序,降序。
Out[135]:
   two  one
d  2.0    5
b  3.0    6
a  4.0    7
c  NaN    4

In [139]: df.sort_values(by = 'two',ascending=False)  #倒序,升序。(将参数False改成True,则为降序)
Out[139]:
   two  one
a  4.0    7
b  3.0    6
d  2.0    5
c  NaN    4

In [141]: df.sort_values(by = 'a',ascending=False,axis = 1) #以行排序(跨列以a行进行排序)
Out[141]:
   one  two
c    4  NaN
d    5  2.0
b    6  3.0
a    7  4.0

In [143]: df.sort_values(by = 'two',ascending=False,axis = 0)  # 以列排序
Out[143]:
   two  one
a  4.0    7
b  3.0    6
d  2.0    5
c  NaN    4

# 索引排序
In [145]: df.sort_index()  # 按照标签索引来排序,默认升序
Out[145]:
two one
a 4.0 7
b 3.0 6
c NaN 4
d 2.0 5

In [146]: df.sort_index(ascending = False)  # 按照降序进行索引排序
Out[146]:
   two  one
d  2.0    5
c  NaN    4
b  3.0    6
a  4.0    7

In [147]: df.sort_index(ascending = False ,axis =1)  # 跨列进行行排序,t在o之前。
Out[147]:
   two  one
c  NaN    4
d  2.0    5
b  3.0    6
a  4.0    7

 备注:

若排序中出现了NaN,则将此行放置最后,不参与排序。

2,pandas - 时间对象处理

①时间序列类型:

  时间戳:特定时刻

  固定时期:如2018年12月

  时间间隔:起始时间-结束时间

Python标准库处理时间对象 datatime
灵活处理时间对象 ①datautil
  ②datautil.parser.parse()
成组处理时间对象 ①pandas
  ②pd.to_datatime()

②产生时间对象数组:

产生时间对象数组:date_range
start 开始时间
end 结束时间
periods 时间长度
freq

时间频率

默认为'D',可选H(our),W(eek),B(usiness),S(emi-)M(onth),

M(min)T(es),S(econd),A(year),...

代码示例:

In [149]: import datetime  # 导入python标准库处理时间对象:datetime
 
In [150]: import dateutil  # 导入灵活处理时间对象:dateutil

In [151]: datetime.datetime.strptime('2010-01-01','%Y-%m-%d')  # 标准库,需要符合书写规范
Out[151]: datetime.datetime(2010, 1, 1, 0, 0)

# 灵活处理时间对象:可以改变自身输入格式,也可得到结果
In [152]: dateutil.parser.parse('2001/02/03')
Out[152]: datetime.datetime(2001, 2, 3, 0, 0)

In [153]: dateutil.parser.parse('2001-02-03')
Out[153]: datetime.datetime(2001, 2, 3, 0, 0)

In [154]: dateutil.parser.parse('2001-FEB-03')
Out[154]: datetime.datetime(2001, 2, 3, 0, 0)

In [155]: dateutil.parser.parse('02/03/2001')
Out[155]: datetime.datetime(2001, 2, 3, 0, 0)

# to_datetime 批量的字符串列表转换成datetime对象的数组或者索引
In [3]: pd.to_datetime(['2018-12-12','2018/11/11'])
Out[3]: DatetimeIndex(['2018-12-12', '2018-11-11'], dtype='datetime64[ns]', freq=None)

# date_range

In [6]: pd.date_range(start = '2018/11/11',end = '2018/12/12')
Out[6]:
DatetimeIndex(['2018-11-11', '2018-11-12', '2018-11-13', '2018-11-14',
               '2018-11-15', '2018-11-16', '2018-11-17', '2018-11-18',
               '2018-11-19', '2018-11-20', '2018-11-21', '2018-11-22',
               '2018-11-23', '2018-11-24', '2018-11-25', '2018-11-26',
               '2018-11-27', '2018-11-28', '2018-11-29', '2018-11-30',
               '2018-12-01', '2018-12-02', '2018-12-03', '2018-12-04',
               '2018-12-05', '2018-12-06', '2018-12-07', '2018-12-08',
               '2018-12-09', '2018-12-10', '2018-12-11', '2018-12-12'],
              dtype='datetime64[ns]', freq='D')

In [7]: pd.date_range('2018/11/11','2018/12/12')  # 可以省略start和end
Out[7]:
DatetimeIndex(['2018-11-11', '2018-11-12', '2018-11-13', '2018-11-14',
               '2018-11-15', '2018-11-16', '2018-11-17', '2018-11-18',
               '2018-11-19', '2018-11-20', '2018-11-21', '2018-11-22',
               '2018-11-23', '2018-11-24', '2018-11-25', '2018-11-26',
               '2018-11-27', '2018-11-28', '2018-11-29', '2018-11-30',
               '2018-12-01', '2018-12-02', '2018-12-03', '2018-12-04',
               '2018-12-05', '2018-12-06', '2018-12-07', '2018-12-08',
               '2018-12-09', '2018-12-10', '2018-12-11', '2018-12-12'],
              dtype='datetime64[ns]', freq='D')

In [8]: pd.date_range(start = '2018/11/11',periods = 8)  # 起始,时间间隔是八天
Out[8]:
DatetimeIndex(['2018-11-11', '2018-11-12', '2018-11-13', '2018-11-14',
               '2018-11-15', '2018-11-16', '2018-11-17', '2018-11-18'],
              dtype='datetime64[ns]', freq='D')

In [9]: pd.date_range(end = '2018/11/11',periods = 8)  # 结束,时间间隔是八天
Out[9]:
DatetimeIndex(['2018-11-04', '2018-11-05', '2018-11-06', '2018-11-07',
               '2018-11-08', '2018-11-09', '2018-11-10', '2018-11-11'],
              dtype='datetime64[ns]', freq='D')

In [10]: pd.date_range('2018/11/11',periods = 8,freq = 'B')  # 工作日
Out[10]:
DatetimeIndex(['2018-11-12', '2018-11-13', '2018-11-14', '2018-11-15',
               '2018-11-16', '2018-11-19', '2018-11-20', '2018-11-21'],
              dtype='datetime64[ns]', freq='B')

In [11]: pd.date_range('2018/11/11',periods = 8,freq = 'H')  # 时间间隔为小时,也可以是1h20min等
Out[11]:
DatetimeIndex(['2018-11-11 00:00:00', '2018-11-11 01:00:00',
               '2018-11-11 02:00:00', '2018-11-11 03:00:00',
               '2018-11-11 04:00:00', '2018-11-11 05:00:00',
               '2018-11-11 06:00:00', '2018-11-11 07:00:00'],
              dtype='datetime64[ns]', freq='H')

In [12]: pd.date_range('2018/11/11',periods = 8,freq = 'W')  # W:星期,默认周日开始
Out[12]:
DatetimeIndex(['2018-11-11', '2018-11-18', '2018-11-25', '2018-12-02',
               '2018-12-09', '2018-12-16', '2018-12-23', '2018-12-30'],
              dtype='datetime64[ns]', freq='W-SUN')

In [13]: pd.date_range('2018/11/11',periods = 8,freq = 'W-MON')  # W-MON:周一开始
Out[13]:
DatetimeIndex(['2018-11-12', '2018-11-19', '2018-11-26', '2018-12-03',
               '2018-12-10', '2018-12-17', '2018-12-24', '2018-12-31'],
              dtype='datetime64[ns]', freq='W-MON')

3,pandas - 时间序列

时间序列就是以时间对象为索引的Series或DateFrame。

datetime对象作为索引时是储存在DatetimeIndex对象中的。

时间序列特殊功能:

  传入“年”或“年 月”作为切片方式

  传入日期范围作为切片方式,可以是某周,某日,也可以是像1H20min这样的更加具体的时间。

    当完成切片工作后,可以给每个特定的时间段进行求和,求平均值(月,周,日,等等)

  丰富的函数支持:重新采样:resample()  

In [17]: sr = pd.Series(np.arange(100),index = pd.date_range('2018/12/18',p
    ...: eriods = 100))

In [18]: sr
Out[18]:
2018-12-18     0
2018-12-19     1
2018-12-20     2
2018-12-21     3
2018-12-22     4
2018-12-23     5
2018-12-24     6
2018-12-25     7
2018-12-26     8
2018-12-27     9
2018-12-28    10
2018-12-29    11
2018-12-30    12
2018-12-31    13
2019-01-01    14
2019-01-02    15
2019-01-03    16
2019-01-04    17
2019-01-05    18
2019-01-06    19
2019-01-07    20
2019-01-08    21
2019-01-09    22
2019-01-10    23
2019-01-11    24
2019-01-12    25
2019-01-13    26
2019-01-14    27
2019-01-15    28
2019-01-16    29
              ..
2019-02-26    70
2019-02-27    71
2019-02-28    72
2019-03-01    73
2019-03-02    74
2019-03-03    75
2019-03-04    76
2019-03-05    77
2019-03-06    78
2019-03-07    79
2019-03-08    80
2019-03-09    81
2019-03-10    82
2019-03-11    83
2019-03-12    84
2019-03-13    85
2019-03-14    86
2019-03-15    87
2019-03-16    88
2019-03-17    89
2019-03-18    90
2019-03-19    91
2019-03-20    92
2019-03-21    93
2019-03-22    94
2019-03-23    95
2019-03-24    96
2019-03-25    97
2019-03-26    98
2019-03-27    99
Freq: D, Length: 100, dtype: int32

In [19]: sr.index
Out[19]:
DatetimeIndex(['2018-12-18', '2018-12-19', '2018-12-20', '2018-12-21',
               '2018-12-22', '2018-12-23', '2018-12-24', '2018-12-25',
               '2018-12-26', '2018-12-27', '2018-12-28', '2018-12-29',
               '2018-12-30', '2018-12-31', '2019-01-01', '2019-01-02',
               '2019-01-03', '2019-01-04', '2019-01-05', '2019-01-06',
               '2019-01-07', '2019-01-08', '2019-01-09', '2019-01-10',
               '2019-01-11', '2019-01-12', '2019-01-13', '2019-01-14',
               '2019-01-15', '2019-01-16', '2019-01-17', '2019-01-18',
               '2019-01-19', '2019-01-20', '2019-01-21', '2019-01-22',
               '2019-01-23', '2019-01-24', '2019-01-25', '2019-01-26',
               '2019-01-27', '2019-01-28', '2019-01-29', '2019-01-30',
               '2019-01-31', '2019-02-01', '2019-02-02', '2019-02-03',
               '2019-02-04', '2019-02-05', '2019-02-06', '2019-02-07',
               '2019-02-08', '2019-02-09', '2019-02-10', '2019-02-11',
               '2019-02-12', '2019-02-13', '2019-02-14', '2019-02-15',
               '2019-02-16', '2019-02-17', '2019-02-18', '2019-02-19',
               '2019-02-20', '2019-02-21', '2019-02-22', '2019-02-23',
               '2019-02-24', '2019-02-25', '2019-02-26', '2019-02-27',
               '2019-02-28', '2019-03-01', '2019-03-02', '2019-03-03',
               '2019-03-04', '2019-03-05', '2019-03-06', '2019-03-07',
               '2019-03-08', '2019-03-09', '2019-03-10', '2019-03-11',
               '2019-03-12', '2019-03-13', '2019-03-14', '2019-03-15',
               '2019-03-16', '2019-03-17', '2019-03-18', '2019-03-19',
               '2019-03-20', '2019-03-21', '2019-03-22', '2019-03-23',
               '2019-03-24', '2019-03-25', '2019-03-26', '2019-03-27'],
              dtype='datetime64[ns]', freq='D')

In [20]: sr
Out[20]:
2018-12-18     0
2018-12-19     1
2018-12-20     2
2018-12-21     3
2018-12-22     4
2018-12-23     5
2018-12-24     6
2018-12-25     7
2018-12-26     8
2018-12-27     9
2018-12-28    10
2018-12-29    11
2018-12-30    12
2018-12-31    13
2019-01-01    14
2019-01-02    15
2019-01-03    16
2019-01-04    17
2019-01-05    18
2019-01-06    19
2019-01-07    20
2019-01-08    21
2019-01-09    22
2019-01-10    23
2019-01-11    24
2019-01-12    25
2019-01-13    26
2019-01-14    27
2019-01-15    28
2019-01-16    29
              ..
2019-02-26    70
2019-02-27    71
2019-02-28    72
2019-03-01    73
2019-03-02    74
2019-03-03    75
2019-03-04    76
2019-03-05    77
2019-03-06    78
2019-03-07    79
2019-03-08    80
2019-03-09    81
2019-03-10    82
2019-03-11    83
2019-03-12    84
2019-03-13    85
2019-03-14    86
2019-03-15    87
2019-03-16    88
2019-03-17    89
2019-03-18    90
2019-03-19    91
2019-03-20    92
2019-03-21    93
2019-03-22    94
2019-03-23    95
2019-03-24    96
2019-03-25    97
2019-03-26    98
2019-03-27    99
Freq: D, Length: 100, dtype: int32

In [21]: sr['2019-01']  # 切出2019年01月所有数据
Out[21]:
2019-01-01    14
2019-01-02    15
2019-01-03    16
2019-01-04    17
2019-01-05    18
2019-01-06    19
2019-01-07    20
2019-01-08    21
2019-01-09    22
2019-01-10    23
2019-01-11    24
2019-01-12    25
2019-01-13    26
2019-01-14    27
2019-01-15    28
2019-01-16    29
2019-01-17    30
2019-01-18    31
2019-01-19    32
2019-01-20    33
2019-01-21    34
2019-01-22    35
2019-01-23    36
2019-01-24    37
2019-01-25    38
2019-01-26    39
2019-01-27    40
2019-01-28    41
2019-01-29    42
2019-01-30    43
2019-01-31    44
Freq: D, dtype: int32

In [22]: sr['2018']  # 只切索引有2018的数据
Out[22]:
2018-12-18     0
2018-12-19     1
2018-12-20     2
2018-12-21     3
2018-12-22     4
2018-12-23     5
2018-12-24     6
2018-12-25     7
2018-12-26     8
2018-12-27     9
2018-12-28    10
2018-12-29    11
2018-12-30    12
2018-12-31    13
Freq: D, dtype: int32

In [23]: sr['2018':'2019-01-11']
Out[23]:
2018-12-18     0
2018-12-19     1
2018-12-20     2
2018-12-21     3
2018-12-22     4
2018-12-23     5
2018-12-24     6
2018-12-25     7
2018-12-26     8
2018-12-27     9
2018-12-28    10
2018-12-29    11
2018-12-30    12
2018-12-31    13
2019-01-01    14
2019-01-02    15
2019-01-03    16
2019-01-04    17
2019-01-05    18
2019-01-06    19
2019-01-07    20
2019-01-08    21
2019-01-09    22
2019-01-10    23
2019-01-11    24
Freq: D, dtype: int32

# resample()函数

In [24]: sr.resample('M').sum()   # 重新采样,计算月计总和,也可以每周W
Out[24]:
2018-12-31      91
2019-01-31     899
2019-02-28    1638
2019-03-31    2322
Freq: M, dtype: int32

In [25]: sr.resample('M').mean()   # 计算每个月平均值
Out[25]:
2018-12-31     6.5
2019-01-31    29.0
2019-02-28    58.5
2019-03-31    86.0
Freq: M, dtype: float64
时间序列代码示例

4,pandas - 文件处理

①数据文件常用格式:csv(以某间隔符分割数据)

ipython获取csv文件路径方法:

# 方法一:获取路径
# 可先用以下代码查看当前工作路径,然后将CSV文件放在该路径下。
import os

os.getcwd()

# 方法二:绝对路径

import pandas as pd
iris_train=pd.read_csv('E:\Study\DataSets\iris_train.csv')

②pandas读取文件:从文件名,URL,文件对象中加载数据

read_csv    # 默认分隔符为逗号
read_table  # 默认分隔符为制表符

read_csv, read_table函数主要参数

read_csv, read_table函数主要参数
sep 指定分隔符,可用正则表达式如'\s+'(\s+表示任意长度的空字符)
header=None 指定文件无序列名,若没有传入name,自动生成01234...为列名
names 指定列名
index_col 指定某列作为行索引
skip_rows 指定跳过某些行,
na_values 指定某些字符串表示缺失值NaN
parse_dates 指定某些列是否被解析为日期,类型为布尔值或者列表

  代码示例:

# 将名为date的这里一列作为索引,并将所传date下的索引改为DatetimeIndex,成为时间索引。
In [5]: pd.read_csv('601318.csv',index_col = 'date',parse_dates = True)

# 也可以指定列名为时间索引,指定date这一列为时间索引
In [6]: pd.read_csv('601318.csv',index_col = 'date',parse_dates = ['date'])

# 如何处理没有列名的数据?
# 针对没有列名的函数,传入数据时其本身会以第一行为列名
# header=None,将每一列命名为数字(从0开始)
# names=list()单独命名列名

# 将None以及abc字符用缺失值替换
In [7]: pd.read_csv('601318.csv',header = None,na_values=['None','abc'])

写入到csv文件:to_csv函数

写入文件函数的主要参数:

写入文件函数的主要参数
sep 指定文件分隔符,默认逗号为分隔符
na_rep 指定缺失值转换的字符串,默认为空字符串
header=False 不输出列名一行
index=False 不输出行索引一列
columns 制定输出的列,传入列表

③pandas支持的其他文件类型:

json, XML, HTML, 数据库, pickle, excel...

posted @ 2019-01-06 17:00  Qiuma  阅读(228)  评论(0编辑  收藏  举报
TOP ↑