pandas 简单使用
创建Series
import pandas as pd
import numpy as np
# 创建的Series都是1维数据
# 方式1 默认索引
pd.Series([4, 7, -5, 3])
# 方式2 指定索引 (数组,index=索引)
a = np.arange(1, 6)
pd.Series(a, index=['一', '二', '三', '四', '五'])
# 方式3 创建n个某固定数的数组 (固定数,生成数量)
pd.Series(0.2,index=range(10))
# 方式4 定长有序字典 (索引,值)
dic1 = {'app': 5, 'awqsdw': 3, 'sdaw2': 10}
pd.Series(dic1)
访问Series数据
s2 = pd.Series([4.0, 6.5, -0.5, 4.2], index=['d', 'b', 'a', 'c'])
# 索引、位置取值
print(s2['a'])
print(s2[0])
# 切片取值方式
print(s2['d':'a'])
# 根据索引取值
# 掩码方法:取['a', 'b', 'c'] 内部索引对应的值,若存在,即为True(取),否则为False(舍)
print(s2[['a', 'b', 'c']])
# 查看内部值(原数据)
print(s2.values)
# 查看索引 (起点,终点,步长)
print(s2.index)
print(s2.shape)
# 维度
print(s2.ndim)
创建表结构pd.DataFrame
# 方法1 数组指定行列,定义行列标签 (index行,columns列)
a = pd.DataFrame(np.arange(12).reshape((3, 4)), index=['a', '牛', 3], columns=[2.2, 33, 44, 5])
# 方法2 字典套列表(长度必须一致)
data = {'A1': [1, 2, 3, ], 'A2': [4, 5, 6]}
# index--行标签,字典键--列标签
b = pd.DataFrame(data, index=['1号', '2号', '3号'])
# 方法3 字典套列表(长度无需一致) 多余空出自动用NaN填充
data = {'S2': pd.Series([1, 2, 3, 4], index=['1号', '2号', '3号', '4号']),
'S1': pd.Series([1, 2, 3], index=['1号', '2号', '3号'])}
# 字典中:index--行标签,字典键--列标签
c = pd.DataFrame(data)
表结构pd.DataFrame属性
使用上面pd.DataFrame方法3举例
# 查看行全部标签
print(c.index)
# 查看列全部标签
print(c.columns)
# 查看列标签的数据类型
print(c.dtypes)
# 按行取(指定数量)
print(c.head(1))
# 按列取(指定数量)
print(c.tail(2))
表结构pd.DataFrame增删改查
# 方法3 字典套列表(长度无需一致) 多余空出自动用NaN填充
data = {'S4': pd.Series([1, 2, 3, 4], index=['1号', '2号', '3号', '4号']),
'S3': pd.Series([1, 2, 3, 4], index=['1号', '2号', '3号', '4号']),
'S2': pd.Series([1, 2, 3, 4], index=['1号', '2号', '3号', '4号']),
'S1': pd.Series([1, 2, 3], index=['1号', '2号', '3号'])}
# 字典中:index--行标签,字典键--列标签
c = pd.DataFrame(data)
print(c)
print('*' * 30)
# 列的访问
print(c['S1'])
print(c[['S1', 'S2']]) # 使用掩码的方式过滤和获取数据 (中括号套中括号)
print(c['1号':'4号']) # 切片操作--必须切行
print(c[c.columns[0:3]]) # 获取全部列标签,将其切片,在使用掩码方式获取数据
# 列的增加` 需指定index行标签
c['S5'] = pd.Series([1, 2, 3, 4], index=['1号', '2号', '3号', '4号'])
print(c)
# 列的删除
del c['S5']
c.pop('S4')
# axis=0时删除行,=1时删除列 注意:不修改原数据
df2 = c.drop(['S1', 'S2'], axis=1)
df2 = df2.drop(['1号', '2号'], axis=0)
print(df2)
# inplace=True 修改原数据
c.drop(['S1', 'S2'], axis=1, inplace=True)
c.drop(['1号', '2号'], axis=0, inplace=True)
print(c)
# 行的访问
print(c)
print('*'*30)
print(c.loc['1号'])
# loc标签索引
print(c.loc['1号':'3号'])
# iloc位置索引
print(c.iloc[0:3])
# 修改数据 必须先列后行
c['S1'][0] = 18
print(c)
pd读写
# 读文件 编码方式为 gbk
csv_data = pd.read_csv('./cs.csv', encoding='utf_8_sig',
# header=None 使用默认行索引,
header=None,
# 自定义names=['第一列','第二列等']
names=['一', '二', '三', '四', '五', '六', '七', '八', '九', '十'],
# 将某列,指定成索引列
index_col=['一'],
# 需要的列,其他都不要了,注意:如过使用索引列,需要加上索引列
usecols=['一', '二', '三']
)
# 若读取 .xlsx 文件 pd.read_excel
# 并且需要安装:pip install openpyxl
# 指定sep使用什么进行分割 sep=','
print(csv_data)
# 查看当前列,的离散数据出现的各个类别出现的频率次数
print(csv_data['一'].value_counts())
# 保存参数:
# 保存--也就是写入
# | filepath_or_buffer | 文件路径 |
# | ------------------ | ------------------------------------------------- |
# | sep | 列之间的分隔符。默认为',' |
# | na_rep | 写入文件时dataFrame中缺失值的内容。默认空字符串。 |
# | columns | 定义需要写入文件的列。 |
# | header | 是否需要写入表头。默认为True。 |
# | index | 会否需要写入行索引。默认为True。 |
# | encoding | 编码。 |
# mode='a' 追加写入 默认是"w"重新写
csv_data.to_csv('./gun2.csv', encoding='utf_8_sig')
其他操作记录
# skiprows=0 跳过第几行
csv_data1 = pd.read_csv('./1.csv', skiprows=0, )
# 删除存在缺失值的整行
csv_data1 = csv_data1.dropna()