pandas模块

pandas模块

pandas基于Numpy,可以看成是处理文本或者表格数据。pandas中有两个主要的数据结构,其中Series数据结构类似于Numpy中的一维数组,DataFrame类似于多维表格数据结构。

pandas是python数据分析的核心模块。它主要提供了五大功能:

  1. 支持文件存取操作,支持数据库(sql)、html、json、pickle、csv(txt、excel)、sas、stata、hdf等。
  2. 支持增删改查、切片、高阶函数、分组聚合等单表操作,以及和dict、list的互相转换。
  3. 支持多表拼接合并操作。
  4. 支持简单的绘图操作。
  5. 支持简单的统计分析操作。

import pandas as pd

1.Series 一维数组

import numpy as np
import pandas as pd

arr = np.array([1, 2, 3, 4, np.nan, ])
s = pd.Series(arr)
print(s)

0    1.0
1    2.0
2    3.0
3    4.0
4    NaN
dtype: float64

2.DataFrame 多维数组

1. 生成表格

dates = pd.date_range('20190101', periods=6)
print(dates)
np.random.seed(1)
arr = 10*np.random.randn(6, 4)
print(arr)
df = pd.DataFrame(arr, index=dates, columns=['c1', 'c2', 'c3', 'c4'])
df
c1 c2 c3 c4
2019-01-01 16.243454 -6.117564 -5.281718 -10.729686
2019-01-02 8.654076 -23.015387 17.448118 -7.612069
2019-01-03 3.190391 -2.493704 14.621079 -20.601407
2019-01-04 -3.224172 -3.840544 11.337694 -10.998913
2019-01-05 -1.724282 -8.778584 0.422137 5.828152
2019-01-06 -11.006192 11.447237 9.015907 5.024943

2. 使用pandas读取字典形式的数据

df2 = pd.DataFrame({'a': 1, 'b': [2, 3], 'c': np.arange(2), 'd': 'hello'})
df2  # 字典的key就变成了cloumns
a b c d
0 1 2 0 hello
1 1 3 1 hello

3. DataFrame属性

属性 详解
dtype 查看数据类型
index 查看行序列或者索引
columns 查看各列的标签
values 查看数据框内的数据,也即不含表头索引的数据
describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
transpose 转置,也可用T来操作
sort_index 排序,可按行或列index排序输出
sort_values 按数据值来排序

4. DataFrame取值

  1. df['c2']:取c2一列
  2. df[0:3]:取前三行
  3. loc/iloc
    1. 通过自定义的行标签选择数据df.loc['2019-01-01':'2019-01-05']
    2. print(df.iloc[2, 1])通过索引取值
    3. df.iloc[1:4, 1:4]
  4. df.values取所有的值
  5. df[df['c1'] > 0]使用逻辑判断取值

5. DataFrame值替换

  1. df.iloc[0:3, 0:2] = 0
  2. df[df['c1'] > 0]=100使用逻辑判断替换

6. 读取CSV文件/逗号分隔值

CSV(Comma-Separated Values),有时也称为字符分隔值,因为分隔字符也可以不是逗号

from io import StringIO

test_data = '''
5.1,,1.4,0.2
4.9,3.0,1.4,0.2
4.7,3.2,,0.2
7.0,3.2,4.7,1.4
6.4,3.2,4.5,1.5
6.9,3.1,4.9,
,,,
'''

test_data = StringIO(test_data)
df = pd.read_csv(test_data, header=None)
df.columns = ['c1', 'c2', 'c3', 'c4']
print(df)

7. 导入导出excel表格

import pandas as pd

df = pd.read_excel(filename)  #读取文件
df.to_excel(filename)  #保存文件
import pandas as pd
from io import StringIO

dic={f'group{k}':[v,v+1,v**2] for k,v in enumerate(range(6))}

df=pd.DataFrame(dic,index=['a','b','c'])

df.to_excel('test.xlsx') #保存文件
df1=pd.read_excel('test.xlsx')  #读取文件

print(df1)

8. pandas读取json文件

strtext = '[{"ttery":"min","issue":"20130801-3391","code":"8,4,5,2,9","code1":"297734529","code2":null,"time":1013395466000},\
{"ttery":"min","issue":"20130801-3390","code":"7,8,2,1,2","code1":"298058212","code2":null,"time":1013395406000},\
{"ttery":"min","issue":"20130801-3389","code":"5,9,1,2,9","code1":"298329129","code2":null,"time":1013395346000},\
{"ttery":"min","issue":"20130801-3388","code":"3,8,7,3,3","code1":"298588733","code2":null,"time":1013395286000},\
{"ttery":"min","issue":"20130801-3387","code":"0,8,5,2,7","code1":"298818527","code2":null,"time":1013395226000}]'

df = pd.read_json(strtext, orient='records')
print(df)

df.to_excel('pandas处理json.xlsx',
            index=False,
            columns=["ttery", "issue", "code", "code1", "code2", "time"])
            

code code1 code2 issue time ttery
0 8,4,5,2,9 297734529 NaN 20130801-3391 1013395466000 min
1 7,8,2,1,2 298058212 NaN 20130801-3390 1013395406000 min
2 5,9,1,2,9 298329129 NaN 20130801-3389 1013395346000 min
3 3,8,7,3,3 298588733 NaN 20130801-3388 1013395286000 min
4 0,8,5,2,7 298818527 NaN 20130801-3387 1013395226000 min
posted @ 2019-07-12 19:58  yellowcloud  阅读(165)  评论(0编辑  收藏  举报
回顶部