Python Pandas中dataframe常用操作(创建、读取写入、切片等) 您所在的位置:网站首页 Pythonpandas切片 Python Pandas中dataframe常用操作(创建、读取写入、切片等)

Python Pandas中dataframe常用操作(创建、读取写入、切片等)

2023-08-16 11:31| 来源: 网络整理| 查看: 265

Series & Dataframe

一个描述得比较好的示意图: 在这里插入图片描述 在一些涉及到批量处理二维列表中数据的场景中,使用dataframe会简便很多。 而只有一维数据的dataframe就是series啦。

感觉dataframe用的多一些,就先记录dataframe吧。 官网:https://pandas.pydata.org/pandas-docs/stable/index.html

import pandas as pd Dataframe 1. 创建Dataframe

空dataframe

# 创建空dataframe >>> df = pd.DataFrame() >>> df Empty DataFrame Columns: [] Index: []

用字典创建dataframe

直接创建自定义列顺序自定义行索引名列名数超过原数据则创建空列。(行索引不能超过行数) # 用字典创建dataframe >>> data = {'name':['apple','egg','watermelon'],'color':['red','yellow','green'],'num':[30,40,50]} # 1.直接创建 >>> df1 = pd.DataFrame(data) >>> df1 name color num 0 apple red 30 1 egg yellow 40 2 watermelon green 50 # 2. 自定义列顺序 >>> df2 = pd.DataFrame(data,columns=['name','num','color']) >>> df2 name num color 0 apple 30 red 1 egg 40 yellow 2 watermelon 50 green # 3. 自定义行索引名 # (给出列表) >>> df3 = pd.DataFrame(data,index=['No.1','No.2','No.3']) >>> df3 name color num No.1 apple red 30 No.2 egg yellow 40 No.3 watermelon green 50 # (使用range(start,end,interval)函数,生成的序列不包含end) >>> df3_1 = pd.DataFrame(data,index=range(0,6,2)) >>> df3_1 name color num 0 apple red 30 2 egg yellow 40 4 watermelon green 50 # 4. 列名数超过原数据则创建空列。(行索引不能超过行数) >>> df4 = pd.DataFrame(data,columns=['name','num','color','price']) >>> df4 name num color price 0 apple 30 red NaN 1 egg 40 yellow NaN 2 watermelon 50 green NaN 2. 获取行/列名列表

>>> df3._stat_axis.values.tolist() ['No.1', 'No.2', 'No.3']

# 方法1 >>> list(df3) ['name', 'color', 'num'] # 方法2 >>> df3.columns.values.tolist() ['name', 'color', 'num']

如果只使用.values得到的是ndarray

>>> df3.columns.values array(['name', 'color', 'price', 'num'], dtype=object) 3. 索引和切片 loc,即location,根据行/列名索引iloc,这个i可以理解成integer,根据行/列号索引索引和切片的思想和list以及numpy的array都类似

行 只能借助loc、iloc。

# loc >>> df3.loc[['No.1','No.3'],['name','color']] # '[]', 索引特定行列 name color No.1 apple red No.3 watermelon green >>> df3.loc['No.1':'No.3','name':'color'] # ':',切片 name color No.1 apple red No.2 egg yellow No.3 watermelon green # iloc >>> df3.iloc[1:] # 行切片,取第2行之后 name color num No.2 egg yellow 40 No.3 watermelon green 50 # 根据值查找行索引 >>>df3[df3['name']=='apple'].index No.1

列 可以直接根据列名。或者使用loc/iloc。

>>> df3['name'] No.1 apple No.2 egg No.3 watermelon Name: name, dtype: object >>> df3.loc[:,'name':'num'] name color num No.1 apple red 30 No.2 egg yellow 40 No.3 watermelon green 50 >>> df3.iloc[:,1] No.1 red No.2 yellow No.3 green Name: color, dtype: object

行+列

>>> df3.iloc[1:,-2:] # loc同理 color num No.2 yellow 40 No.3 green 50 # 范围搜索 >>> df3[df3['num']>30] # num>30的所有行 name color num No.2 egg yellow 40 No.3 watermelon green 50 >>> df3['name'][df3['num']>30] # num>30的所有行的'name'信息 No.2 egg No.3 watermelon Name: name, dtype: object

dataframe内的数据类型是series

# dataframe内的数据类型是series >>> type(df3['name']) 4. 添加列 添加空列 # 方法一: >>> df3['price'] = '' >>> df3 name color num price No.1 apple red 30 No.2 egg yellow 40 No.3 watermelon green 50 # 方法二 >>> df3['price'] = pd.Series(dtype='int',index=['No.1','No.2','No.3']) # 等价于 >>> df3['price'] = 0 >>> df3 name color num price No.1 apple red 30 0 No.2 egg yellow 40 0 No.3 watermelon green 50 0

注意:不能用空列表[]初始化。

添加/在指定位置插入列

对索引顺序没有要求,就直接添加更简单。直接添加默认加到最后

>>> df3['price']=[1,2,3] >>> df3 name color num price No.1 apple red 30 1 No.2 egg yellow 40 2 No.3 watermelon green 50 3

对索引顺序有要求的用Series添加。 注意:若使用Series初始化一定要指定index,因为它默认索引为0、1、2…,如果你的dataframe索引不是,就会全部初始化为NaN。

>>> df3['price']=pd.Series([1,2,3]) >>> df3 name color num price No.1 apple red 30 NaN No.2 egg yellow 40 NaN No.3 watermelon green 50 NaN >>> df3['price']=pd.Series([1,2,3],index=['No.2','No.1','No.3']) >>> df3 name color num price No.1 apple red 30 2 No.2 egg yellow 40 1 No.3 watermelon green 50 3

insert指定插入位置

>>> df3.insert(2,'price',[1,2,3]) >>> df3 name color price num No.1 apple red 1 30 No.2 egg yellow 2 40 No.3 watermelon green 3 50 5. 删除行/列

行 drop函数默认删除行。不会删除原数据,需要赋值给新变量。或者指定inplace=True。

>>> df3.drop('No.3') name color num price No.1 apple red 30 2 No.2 egg yellow 40 1 >>> df3 name color num price No.1 apple red 30 2 No.2 egg yellow 40 1 No.3 watermelon green 50 3

列 del会直接在原数据中删除。

>>> del df3['price'] >>> df3 name color num No.1 apple red 30 No.2 egg yellow 40 No.3 watermelon green 50

drop函数指定axis=1为删除列。inplace=True直接在原数据上执行操作。

>>> df3.drop('num', axis=1, inplace=True) >>> df3 name color No.1 apple red No.2 egg yellow No.3 watermelon green 6. 读取/写入csv、excel为dataframe 读取

read_csv() 参数:

na_vlaues: 设置缺失值形式。parse_dates: 将指定的列解析成时间日期格式。和infer_datetime_format一起使用速度会快很多。 df = pd.read_csv('test.csv', na_values='NAN', parse_dates=['date'],infer_datetime_format=True)

read_excel() 参数:

sheet_name: 设置读取的 sheet 名。na_values: 设置缺失值的形式。 df = pd.read_excel('test.xlsx', sheet_name='sheet1', na_values='n/a')

其它参考:https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html

写入

写入各种文件的方法可以参考这篇文章: https://blog.csdn.net/tz_zs/article/details/81137998

df.to_excel(sheet_name='sheet1',startcol=0,index=False) df.to_csv("test.csv", index=False) 7. 其他操作

查看前几行。

>>> df3.head() # 默认5行,可传入数值指定行数

调整print时dataframe显示行列数量。

#显示所有列 pd.set_option('display.max_columns', None) # None处也可以是想要的具体数值 #显示所有行 pd.set_option('display.max_rows', None) #显示宽度无限长 pd.set_option('display.width', None)

先记录这么多,之后想起来再补充~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有