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

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'])
<class 'pandas.core.series.Series'>

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)

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

  • 136
    点赞
  • 369
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Dataframepandas的一个数据结构,用于处理表格数据。你可以使用不同的方法来读取Dataframe的数据。 一种常见的方法是使用方括号\[\]来读取数据。你可以通过指定列标签和行标签来获取特定的数据。例如,使用DataFrame\['列标签'\]\['行标签'\]可以读取指定位置的数据。\[3\] 另外,你还可以使用pandas提供的一些方法来读取Dataframe的数据。例如,使用loc方法可以通过指定行和列的标签来读取数据。使用iloc方法可以通过指定行和列的索引来读取数据。这些方法提供了更灵活的方式来读取Dataframe的数据。\[1\] 如果你想创建一个空的Dataframe,你可以使用pd.DataFrame()来创建一个没有任何列和行的空Dataframe。\[2\] 希望这些信息对你有帮助!如果你还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [Python Pandasdataframe常用操作创建读取写入切片等)](https://blog.csdn.net/Parzival_/article/details/114240650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python基础:小白自学pandas--DataFrame数据读取的方法](https://blog.csdn.net/m0_51367666/article/details/119062373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值