pandas常用数据结构
pd.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
pandas读写excel文件
import pandas as pd
#以第四行为头标题,以名字为"序号"的这一列为索引
data = pd.read_excel("xxx1.xlsx", header=3, index_col='序号')
data.to_excel("xxx2.xlsx")
pandas 审阅数据
print(data.columns)
#查看数据的前5行
print(data.head())
#查看数据的后5行
print(data.tail())
#查看维度信息
print(data.shape)
#查看每一列的数据格式
print(data.dtypes)
# 查看数据表基本信息(维度、列名称、数据格式、所占空间等)[挺有用的]
print(data.info())
#查看某一列的数据,两种方式,但是中文可能有危险
print(data['综合评价'])
print(data.综合评价)
# 按索引提取单行或者多行的数据,注意,从0开始
# 提取第4行
print(data.iloc[4])
# 提取到第4行
print(data.iloc[0:4])
# 提取所有行,0到4列
print(data.iloc[:, 0:4])
# 提取第1,2,5行的0到4列
print(data.iloc[[0,1,4],0:1])
# 提取第1,2,5行的第3,4列
print(data.iloc[[0,1,4],[2,3]])
#dataFrame中at使用,先行后列
print(data.at[i, "综合评价"])
# 按发明人数量进行排序,取前10行
inventor_count = data.sort_values(by=['发明人数量'], ascending=False).loc[:10,["专利名称", "发明人数量"]]
print(inventor_count)
https://blog.csdn.net/qq_18351157/article/details/105362159列的索引排序(原始排序)
count_class = pd.value_counts(data['存活期'], sort=True)
print(count_class)
pandas非法值处理
# 删除某列中为空的数据
mydf.dropna(subset=['列名'],inplace=True)
pandas 数据类型
pandas类型 | python类型 |
---|---|
object | str |
int64 | int |
float64 | float |
bool | bool |
#pandas数据类型转化 astype()函数
data['首次公开日'] = data['首次公开日'].astype(str)
pandas Dataframe的复制
#很多的时候,对数据的处理会影响到本身,如果不想改变原始数据的话可以复制一个副本
#[]可以选取dataframe中的多列,然后调用copy函数(似乎不用copy也行)
data1 = data[['col1','col2']].copy()
pandas时间处理
#时间转化
pd.to_datetime(data['首次公开日'],format="%Y%m%d", errors='coerce')
#这里errors参数 这个参数有三个属性
# raise 属性 如果遇到错误会显示错误信息。【默认】
# coerce 属性 如果遇到错误会设置为nat , 然后删除为空的可以实现信息过滤。
# ignore 属性 如果遇到转换失败,会把不能转换的属性保留,只转换能转换的值。
条件判断
#返回一个布尔值列表
print(data['发明人数量']==6)
#返回发明人数量等于6的数据的专利名称和发明人数量
print(data.loc[data['发明人数量']==6, ["专利名称", "发明人数量"]])
#字符串匹配 https://blog.csdn.net/qq_18351157/article/details/105362159
完全匹配
==
部分匹配
str.contains() 包含一个特定的字符串
参数:
na:缺失值NAN处理
case:是否对大小写敏感
regex:使用正则表达式模式
str.endswith() 以特定的字符串结尾
str.startswith() 以特定字符串开头
str.match() 匹配正则表达式模式
#例子 选择包含'SIEMENS'的数据,na=False可以消除NAN影响
data[data['专利权人'].str.contains('SIEMENS',na=False)]
#pandas中的bool运算
df[条件1 & 条件2] #逻辑并
df[条件1 | 条件2] #逻辑或
data[data['专利权人'].str.contains('西门子',na=False)|data['专利权人'].str.contains('SIEMENS',na=False)]
pandas骚操作
#将一行的数据拆分为多行
rule.explode('condition')
pandas分组和排序
#按首次公开日排序
data['首次公开日'].groupby(data['首次公开日']).count()
#numpy对值进行排序
np.sort(values)
#unique()返回列中所有不重复的值
values = data['首次公开日'].unique()
#pandas中sort_values函数
data.sort_values(by, axis, ascending, inplace)
# by:可以是字符串也可以是列表如 "a" 或者 ["a", "b"]指定行列排序
# axis=0【默认】 按列排序 axis=1 按行排序
# ascending=True【默认】从小到大 ascending=False 从大到小
pandas调整列之间的顺序
#可以直接指定列的顺序
order = ['country','count']
df = df[order]
#或者
df = df[['country','count']]
loc和iloc的区别
loc函数 使用行列索引来指定数据 iloc函数使用行列号来指定数据
print(data.loc[['a', 'b'], ['A', 'B']])
print(data.iloc[[0, 1], [0, 1]])
pandas导出数据
#pandas修改索引名字
data.set_index("xxx")
df.to_excel("excel_name.xlsx")
#不带索引
df.to_excel("excel_name.xlsx",index=None)