当前位置:   article > 正文

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

python pandas dataframe

Series & Dataframe

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


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

import pandas as pd
  • 1

Dataframe

1. 创建Dataframe

空dataframe

# 创建空dataframe
>>> df = pd.DataFrame()
>>> df
Empty DataFrame
Columns: []
Index: []
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

用字典创建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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

2. 获取行/列名列表

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

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

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

>>> df3.columns.values   
array(['name', 'color', 'price', 'num'], dtype=object)
  • 1
  • 2

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20


可以直接根据列名。或者使用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

行+列

>>> 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

dataframe内的数据类型是series

# dataframe内的数据类型是series
>>> type(df3['name'])
<class 'pandas.core.series.Series'>
  • 1
  • 2
  • 3

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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


添加/在指定位置插入列

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

>>> 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

对索引顺序有要求的用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9


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

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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)
  • 1

read_excel() 参数

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

其它参考: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)
  • 1
  • 2

7. 其他操作

查看前几行。

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/153219
推荐阅读
相关标签
  

闽ICP备14008679号