Pandas 基本操作 和应用


Pandas

python 最强的数据分析数据处理工具包

1 主要处理 一维 二维数据

2 成熟的io 读取功能

处理浮点与非浮点数据里的缺失数据,表示为 NaN;
大小可变:插入或删除 DataFrame 等多维对象的列;
自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;
强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;
把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;
基于智能标签,对大型数据集进行切片、花式索引、子集分解等操作;
直观地合并(merge)、**连接(join)**数据集;
灵活地重塑(reshape)、**透视(pivot)**数据集;
轴支持结构化标签:一个刻度支持多个标签;
成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel 文件、数据库等来源的数据,利用超快的 HDF5 格式保存 / 加载数据;
时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。

处理数据一般分为几个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想工具。
维数 名称 描述
1 Series 带标签的一维同构数组
2 DataFrame 带标签的,大小可变的,二维异构表格

使用

1 生成对象

# Series 对象 series 自带序列索引 以及dtype 数据类型  int64 float64 object
s = pd.Series([1, 3, 5, np.nan, 6, 8])

# 时间序列对象
dates = pd.date_range('20130101', periods=6)

# dataframe 对象 利用 series 对象和时间1序列对象生成
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
df2 = pd.DataFrame({'A': 1.,
                       'B': pd.Timestamp('20130102'),
                    'C': pd.Series(1, index=list(range(4)), dtype='float32'),
                     'D': np.array([3] * 4, dtype='int32'),
                    'E': pd.Categorical(["test", "train", "test", "train"]),
                    'F': 'foo'})

查看数据

df.head() 返回前n行 数据大的测试看看方便
df2.columns
df2.values
结果都是pandas 对象
df.to_numpy() 转numpy 本质是浮点很快
DataFrame.to_numpy() 的输出不包含行索引和列标签

 df.describe() 可以快速查看数据的统计摘要
  df.T  转置数据
 df.sort_index(axis=1, ascending=False) 按轴排序
   df.sort_values(by='B') 按值排序

支持df['A']  df.A 切片

按标签选择
df.loc[dates[0]]

筛选
df2[df2['E'].isin(['two', 'four'])]

赋值
用索引自动对齐新增列的数据
s1 = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20130102', periods=6))

标签???

缺失值处理

df1.dropna(how='any') 删除行
df1.fillna(value=5) 补充指

读取与转换

写入

pandas 读取表格数据插入数据库

对应方法

读取
pd_obj = pd.read_csv(path)
df_data.to_sql(name=table_name, con=self.__db_engine, index=False, if_exists="append", method="multi")

# con 为数据库信息对象 一般用sqlachemy 创建
插入

简单处理数据流程

# 从exel 读取数据
data = pd.read_excel('myexle.xlsx', index_col=0, sheet_name='sheet1')
# 按字段值过滤
data = data[data["状态"] == "合格"]
# 替换字段名
data.rename(columns=exel_sql_map) # exel_sql_map 为字典key 是原有列名 v 是替换后的
# 删除不需要的列
data.drop(needless_columns, axis=1, inplace=True) # needless_columns是一个列表

# 新增列 这里我是根据已有两个列数据 构建另外三个列 处理逻辑因人而异 主要 data['city'] = city_list 这个方法 和字典增加键值对一样
adcode_list = []
city_list = []
point_list = []
for longitude, latitude in zip(data["longitude"], data["latitude"]):
    adcode, city = get_adcode_city(longitude, latitude)
    adcode_list.append(adcode)
    city_list.append(city)
    point_list.append(Point(int(longitude), int(latitude)))
point_list = geopandas.GeoSeries(point_list)
data['city'] = city_list
data['adcode'] = adcode_list
data['point'] = point_list

# 结果输出为exel
data.to_excel('test.xlsx', sheet_name='Sheet4', index=False)
# 入库
from sqlalchemy import create_engine

engine = create_engine('数据库信息', echo=False)
data.to_sql('users', con=engine, if_exists='replace', index_label='id')

# https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html 官网链接