数据处理之pandas库
1. Series对象
由于series对象很简单,跟数组类似,但多了一些额外的功能,偷个懒,用思维导图表示
2. DaraFrame对象
DataFrame将Series的使用场景由一维扩展到多维,数据结构跟Excel工作表极为相似,说白了就是矩阵
1. 定义DataFrame对象
DataFrame对象的构造分三部分:数据data,行标签index和列标签columns,下面给出三种构造方法
data = {'color':['blue','green','yellow','red','white'],
'object':['ball','pen','pencil','paper','mug'],
'price':[1.2,1.0,0.6,0.9,1.7]}
#构造DataFrame方法1
frame1 = pd.DataFrame(data)
print(frame1)
#构造DataFrame方法2
frame2 = pd.DataFrame(data,columns=['object','price'])
print(frame2)
#构造DataFrame方法3
frame3 = pd.DataFrame(data,columns=['object','price'],index=['a','b','c','d','e'])
print(frame3)
上面代码中的data可以为字典,ndarray和matrix对象
2. 选取元素
(1)获取行标(index)--->frame.index
(2)获取列标(columns)--->frame.columns
(3)获取数据结构中的所有元素 --->frame.values
(4)获取每一列的元素 --->frame['price']或frame.price
(5)获取dataframe中的行信息,可以使用ix方法的索引和数组方式或frame的切片方法
frame.ix[2] --->获取第3行的信息
frame.ix[[2,4]] --->获取第3行和第5行的信息
frame[1:3] --->获取索引为1和2的行信息
(6)获取指定cell元素 --->frame['price'][3]
(7)根据元素值进行筛选,比如:--->frame[frame < 12]
3. 赋值
通过选取元素同样的逻辑就能增加和修改元素
(1)修改指定元素的值 --->frame['price'][3] = 8.6
(2)增加新列new,指定每行的值都为12 --->frame['new'] = 12
(3)更新指定列的内容 --->frame['new'] = [1,2,3,4,5]
同样也可以使用Series对象为列赋值
array = np.arange(5)
series = pd.Series(array,index=['a','b','c','d','e'])
print(series)
frame3['new'] = series
print(frame3)
输出:
4. 删除指定行和列
删除指定行和指定列都使用drop函数
例:
#删除标签为'a'和'b'的行
frame4 = frame3.drop(['a','b'],axis=0,inplace=False)
print('删除指定行:\n',frame4)
#删除标签为'price'的列
frame5 = frame3.drop(['price'],axis=1,inplace=False)
print('删除指定列:\n',frame5)
输出:
3. 统计函数
和:sum():
均值:mean()
计算多个统计量:describe()
相关性:corr()
协方差:cov()
array = np.array([[1,4,3,6],[4,5,6,1],[3,3,1,5],[4,1,6,4]])
index = ['red','blue','yellow','white']
columns = ['ball','pen','pencil','paper']
frame = pd.DataFrame(array,index=index,columns=columns)
print(frame)
print(frame.corr())
print(frame.cov())
4. 数据筛选
a b c
(1)单条件筛选
df[df['a']>]
# 如果想筛选a列的取值大于30的记录,但是之显示满足条件的b,c列的值可以这么写
df[['b','c']][df['a']>]
# 使用isin函数根据特定值筛选记录。筛选a值等于30或者54的记录
df[df.a.isin([, ])]
(2)多条件筛选
可以使用&(并)与| (或)操作符或者特定的函数实现多条件筛选
# 使用&筛选a列的取值大于30,b列的取值大于40的记录
df[(df['a'] > ) & (df['b'] > )]
(3)索引筛选
a. 切片操作
df[行索引,列索引]或df[[列名1,列名2]]
#使用切片操作选择特定的行
df[:]
#传入列名选择特定的列
df[['a','c']]
b. loc函数
当每列已有column name时,用 df [ ‘a’ ] 就能选取出一整列数据。如果你知道column names 和index,且两者都很好输入,可以选择 .loc同时进行行列选择。
In []: df.loc[,'c']
Out[]: In []: df.loc[:,['a','c']]
Out[]:
a c In []: df.loc[[,,],['a','c']]
Out[]:
a c
c. iloc函数
如果column name太长,输入不方便,或者index是一列时间序列,更不好输入,那就可以选择 .iloc了,该方法接受列名的index,iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取。这边的 i 我觉得代表index,比较好记点。
In []: df.iloc[,]
Out[]: In []: df.iloc[:,[,]]
Out[]:
a c In []: df.iloc[[,,],[,]]
Out[]:
a c In []: df.iloc[[,,],:]
Out[]:
a b
d. ix函数
ix的功能更加强大,参数既可以是索引,也可以是名称,相当于,loc和iloc的合体。需要注意的是在使用的时候需要统一,在行选择时同时出现索引和名称, 同样在同行选择时同时出现索引和名称。
df.ix[:,['a','b']]
Out[]:
a b In []: df.ix[[,,],['a','b']]
Out[]:
a b In []: df.ix[[,,],[,]]
Out[]:
a c
e. at函数
根据指定行index及列label,快速定位DataFrame的元素,选择列时仅支持列名。
In []: df.at[,'a']
Out[]:
f. iat函数
与at的功能相同,只使用索引参数
In []: df.iat[,]
Out[]:
5. csv操作
csv文件内容
Supplier Name,Invoice Number,Part Number,Cost,Purchase Date
Supplier X,-,,$500.00 ,//
Supplier X,-,,$500.00 ,//
Supplier X,-,,$750.00 ,//
Supplier X,-,,$750.00 ,//
Supplier Y,-,,$250.00 ,//
Supplier Y,-,,$250.00 ,//
Supplier Y,-,,$125.00 ,//
Supplier Y,-,,$125.00 ,//
Supplier Z,-,,$615.00 ,//
Supplier Z,-,,$615.00 ,//
Supplier Z,-,,$615.00 ,//
Supplier Z,-,,$615.00 ,//
(1)csv文件读写
关于read_csv函数中的参数说明参考博客:https://blog.csdn.net/liuweiyuxiang/article/details/78471036
import pandas as pd # 读写csv文件
df = pd.read_csv("supplier_data.csv")
df.to_csv("supplier_data_write.csv",index=None)
(2)筛选特定的行
#Supplier Nmae列中姓名包含'Z',或者Cost列中的值大于600
print(df[df["Supplier Name"].str.contains('Z')])
print(df[df['Cost'].str.strip('$').astype(float) > ])
print(df.loc[(df["Supplier Name"].str.contains('Z'))|(df['Cost'].str.strip('$').astype(float) > 600.0),:]) #行中的值属于某个集合
li = [,]
print(df[df['Part Number'].isin(li)])
print(df.loc[df['Part Number'].astype(int).isin(li),:]) #行中的值匹配某个模式
print(df[df['Invoice Number'].str.startswith("001-")])
(3)选取特定的列
#选取特定的列
#列索引值,打印1,3列
print(df.iloc[:,::])
#列标题打印
print(df.loc[:,["Invoice Number", "Part Number"]])
#选取连续的行
print(df.loc[:,:])
最新文章
- [Jmeter]打开jmeter.bat报错的解决思路与方法
- arguments .length .callee caller
- MySQL can’t specify target table for update in FROM clause
- VLC命令行的应用
- javaScript模块化一
- C#中的集合类——HashTable
- 使用D3 Geo模块画澳大利亚地图
- HTML图像
- Chrome浏览器及调试教程
- python正则表达式--flag修饰符、match对象属性
- Java Integer 与 int 深刻理解
- ES6 模板字面量
- 限制Apache日志access.log、error.log文件大小
- 【工具】我的Git学习日志
- 在asp.net中使用瀑布流,无限加载
- python 类方法中参数使用默认值的方法
- Scala集合类型详解
- 洛谷P4424 寻宝游戏 [HNOI/AHOI2018]
- oracle的学习笔记
- ECMAScript5之Object学习笔记(三)