第三十八篇 pandas模块

Posted itboy-newking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三十八篇 pandas模块相关的知识,希望对你有一定的参考价值。

pandas

基于numpy模块,用于处理文本或表格数据,支持文件存取操作,支持数据库

import pandas as pd

import numpy as np

Series

只能放一维数组

print(pd.Series([1,2,3,4,5]))
'''
0    1
1    2
2    3
3    4
4    5
dtype: int32
'''
print(pd.Series(np.array([1,2,3,4,5])))
'''
0    1
1    2
2    3
3    4
4    5
dtype: int32
'''
print(pd.Series(np.array([1,2,3,4,5]),dtype='int64'))
'''
0    1
1    2
2    3
3    4
4    5
dtype: int64
'''

pd.DataFrame

二维数组及以上使用,生成一个表格

 print(pd.DataFrame(np.array([[1,2,3,4],[5,6,7,8]])))
'''
   0  1  2  3
0  1  2  3  4
1  5  6  7  8
'''

pd.date_range()

生成一个时间索引的一维数组

dates = pd.date_range('2019-06',periods=30)
print(dates)
'''
DatetimeIndex(['2019-06-01', '2019-06-02', '2019-06-03', '2019-06-04',
               '2019-06-05', '2019-06-06', '2019-06-07', '2019-06-08',
               '2019-06-09', '2019-06-10', '2019-06-11', '2019-06-12',
               '2019-06-13', '2019-06-14', '2019-06-15', '2019-06-16',
               '2019-06-17', '2019-06-18', '2019-06-19', '2019-06-20',
               '2019-06-21', '2019-06-22', '2019-06-23', '2019-06-24',
               '2019-06-25', '2019-06-26', '2019-06-27', '2019-06-28',
               '2019-06-29', '2019-06-30'],
              dtype='datetime64[ns]', freq='D')
'''

# np.random.rand生成随机数(价格),利用pd.date_range生成日期索引
good_list = ['book','bike','drunk','huawei','car']
good_price = np.random.rand(7,5)
date = pd.date_range('2019-6-12',periods=7)
df = pd.DataFrame(good_price,index=date,columns=good_list)
print(df)
'''
                book      bike     drunk    huawei       car
2019-06-12  0.043552  0.111986  0.323475  0.930866  0.838791
2019-06-13  0.249247  0.138921  0.409256  0.182755  0.715179
2019-06-14  0.285038  0.355326  0.093277  0.187183  0.820155
2019-06-15  0.003262  0.372441  0.925479  0.988700  0.242206
2019-06-16  0.551080  0.560331  0.326195  0.944092  0.504605
2019-06-17  0.473796  0.596993  0.807937  0.616850  0.824657
2019-06-18  0.762190  0.491334  0.040981  0.204430  0.866449
'''

在生成的表格中查看各类数据

print(df.columns) # ['book','bike','drunk','huawei','car']
'''
dtype  查看数据类型
index  查看行序列或者索引
columns    查看各列的标签
values 查看数据框内的数据,也即不含表头索引的数据
describe   查看数据每一列的极值,均值,中位数,只可用于数值型数据
transpose  转置,也可用T来操作
sort_index 排序,可按行或列index排序输出
sort_values() 按数据值排序
'''

处理缺失数据

test_data = '''
0,1,2,3
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,
'''

导入StringIO

from io import StringIO
test_data = StringIO(test_data)   # office把数据读入内存

pd.read_csv 把第一行当作行索引,在第一列填充列索引

df = pd.read_csv(test_data)  # 添加行和列的索引,打印cheng表格格式
print(df)
'''
     0    1    2    3
0  5.1  NaN  1.4  0.2
1  4.9  3.0  1.4  0.2
2  4.7  3.2  NaN  0.2
3  7.0  3.2  4.7  1.4
4  6.4  3.2  4.5  1.5
5  6.9  3.1  4.9  NaN
'''

dropna 只要出现NaN(无效值)的行就删除

  • 以及该方法中的参数控制
 print(df.dropna())  默认是 df.dropna(axis=0)
'''
     0    1    2    3
1  4.9  3.0  1.4  0.2
3  7.0  3.2  4.7  1.4
4  6.4  3.2  4.5  1.5
'''

# axis参数
# dropna(axis=1)只要出现NaN(无效值)的列就删除
 print(df.dropna(axis=1))
'''
     0
0  5.1
1  4.9
2  4.7
3  7.0
4  6.4
5  6.9
'''

# thresh参数
# dropna中的thresh参数:保留具有thresh参数指定个数有效值的行,没有这么多有效数据的行就删除
print(df.dropna(thresh=3,axis=0))
'''
     0    1    2    3
0  5.1  NaN  1.4  0.2
1  4.9  3.0  1.4  0.2
2  4.7  3.2  NaN  0.2
3  7.0  3.2  4.7  1.4
4  6.4  3.2  4.5  1.5
5  6.9  3.1  4.9  NaN

'''
print(df.dropna(thresh=4,axis=0))
'''    
    0    1    2    3
1  4.9  3.0  1.4  0.2
3  7.0  3.2  4.7  1.4
4  6.4  3.2  4.5  1.5
'''
print(df.dropna(thresh=5,axis=0))
'''
Empty DataFrame
Columns: [0, 1, 2, 3]
Index: []
'''

# dropna中的subset参数
print(df.dropna(subset=['3']))
'''
     0    1    2    3
0  5.1  NaN  1.4  0.2
1  4.9  3.0  1.4  0.2
2  4.7  3.2  NaN  0.2
3  7.0  3.2  4.7  1.4
4  6.4  3.2  4.5  1.5
'''

# fillna参数
# 将NaN(无效值)都赋值为0
print(df.fillna(value=0))

合并数据

DataFrame 如果不输入index和column参数,则都默认从0开始

df1 = pd.DataFrame(np.zeros((3,4)))
print(df1)
'''
     0    1    2    3
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
'''
df2 = pd.DataFrame(np.ones((3,4)))
print(df2)
'''
     0    1    2    3
0  1.0  1.0  1.0  1.0
1  1.0  1.0  1.0  1.0
2  1.0  1.0  1.0  1.0
'''

pd.concat()

# pd.concat(,axis=0)垂直合并数组
print(pd.concat((df1,df2),axis=0))
'''
     0    1    2    3
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
0  1.0  1.0  1.0  1.0
1  1.0  1.0  1.0  1.0
2  1.0  1.0  1.0  1.0
'''

# pd.concat(,axis=1)   水平合并数组
print(pd.concat((df1,df2),axis=1))
'''
     0    1    2    3    0    1    2    3
0  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
1  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
'''

数据写入excel文件和读取excel文件

 df = pd.DataFrame(good_price,index=date,columns=good_list)
df.to_excel(r'C:\Users\联想\Desktop\d.xlsx')
df0 = pd.read_excel(r'C:\Users\联想\Desktop\d.xlsx',header=0,index_col=0)
print(df0)
'''
                book      bike     drunk    huawei       car
2019-06-12  0.322727  0.029768  0.826520  0.589433  0.347090
2019-06-13  0.428079  0.415530  0.809133  0.746058  0.931913
2019-06-14  0.333673  0.594986  0.346576  0.920752  0.225355
2019-06-15  0.712803  0.449877  0.551796  0.302778  0.782467
2019-06-16  0.004480  0.398669  0.296981  0.746109  0.534168
2019-06-17  0.615625  0.976240  0.780116  0.227414  0.666836
2019-06-18  0.161665  0.873286  0.490482  0.960265  0.967142
'''

按索引(或key)取值

1.df.loc[]

# df0.loc[] 里面放key
print(df0.loc['2019-06-12'])
'''
book      0.322727
bike      0.029768
drunk     0.826520
huawei    0.589433
car       0.347090
Name: 2019-06-12 00:00:00, dtype: float64
'''

2.df.iloc[]

# df0.iloc[]里面放索引值,类似于numpy模块中的二维数组的索引取值
print(df0.iloc[0,0])
'''
0.322727442903458
'''
# 可以用这种方法赋值
df0.iloc[0,:] = 0
print(df0)
'''
                book      bike     drunk    huawei       car
2019-06-12  0.000000  0.000000  0.000000  0.000000  0.000000
2019-06-13  0.428079  0.415530  0.809133  0.746058  0.931913
2019-06-14  0.333673  0.594986  0.346576  0.920752  0.225355
2019-06-15  0.712803  0.449877  0.551796  0.302778  0.782467
2019-06-16  0.004480  0.398669  0.296981  0.746109  0.534168
2019-06-17  0.615625  0.976240  0.780116  0.227414  0.666836
2019-06-18  0.161665  0.873286  0.490482  0.960265  0.967142
'''

以上是关于第三十八篇 pandas模块的主要内容,如果未能解决你的问题,请参考以下文章

第三十八篇 vue

Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁信号量事件队列生产者消费者模型

Python之路(第十八篇)shutil 模块zipfile模块configparser模块

走入计算机的第三十八天(python的进程和协成))

WPF效果第一百九十八篇之模块对比

第二十八篇 vue