Pandas处理数据遇到的问题与解决

set_index与reindex的区别set_index能够将DataFrame中的某一column设置为索引reindex的作用是根据new_index重新排列DataFrame如果新的new_index中含有原index未含有的索引,则对应的行的值全部是Nan,当然,可以选择在reindex( )传入method参数来解决这一点,例如:method=‘ffill’读入DataFrame时的数据类型问题问题描述在通过pd.read_csv( )方法读入csv数据时,如果未指定dat
摘要由CSDN通过智能技术生成

前言

主要记录自己pandas处理数据遇到的一些困难,基础非常薄弱,希望能越来越熟练


Next:set_index与reindex的区别

问题描述
经常会遇到

  1. 更改index
  2. 将某一个column的信息设置为index(例如股票数据处理中,经常会遇到某一个column为日期)
  3. 按照指定的index重新拍累dataframe

问题解决

  • pd.set_index能够将DataFrame中的某一column设置为索引。如果传入的是column列表,则设置多层索引。
  • pd.reindex的作用是根据new_index重新排列DataFrame,且如果新的new_index中含有原index未含有的索引,则会创建新的行,且对应的行的值全部是Nan,当然,可以选择在reindex( )传入method参数来解决这一点,例如:method='ffill'

注意,set_index, reindex, sort_index的区别

  1. set_index是将原本就存在的某一列或者某几列设置为索引,以构建索引(或者多层索引)
  2. reindex是将原来的DataFrame按照现如今新给出的index进行排序,可能会造成df数据的扩充,也可能会造成缺失值,需要进行处理
  3. sort_index是不改变现有的index,只是将他们按照升序或者降序,重新排列数据,但如果数据不是升序或者降序,而是特殊的序列,则需要用reindex进行排序了

Next: 读入DataFrame时的数据类型问题

1. 指定读取csv文件时的数据类型

问题描述
在通过pd.read_csv( )方法读入csv数据时,如果未指定data_type,那么该方法会按照默认设置读入数据,有时候会将string字符串形式保存的数字读成float或者int的数据类型。
例如,我的trade_date是以字符串形式保存的,但是读入的时候默认变成了整数形,从而导致我按照字符串的index来reindex时,整个DataFrame的数据全部变为了Nan
在这里插入图片描述
解决方法
在读入数据的时候,通过pd.read_csv( )设置参数 dtype={'trade_date' : 'string'},就可以了;当然,如果要以数值的形式读入,设置dtype={'trade_date' : 'value'},更改之后效果如下:
在这里插入图片描述

2.读取csv文件时,指定作为index的列

设置index_col=column_name即可,当设置为0时,默认不读取任何一列作为index

pd.read_csv(index_col=column_name)

Next: 读写DataFrame时的参数问题

1. 写入DataFrame时
  • header:这代表将DataFrame的第n行作为表头,设置为False代表无表头
df = pd.DataFrame()
df.to_csv(header=None or 0~len(index))
  • index:设置为True时,python会自动创造一个index,再次读入的时候,则会出现一个名称为unnamed的column,此column就是之前创造的,设置为False时,则不会创造此index
    注意:如果之前读入DataFrame的时候,通过index_col=设置了index,则再次存入的时候,不要设置index=False,否则这会导致index的信息缺失!
    在这里插入图片描述
  • index_label:设置index的名称,可以用df.index.name进行访问,如果没有设置,则会出现unnamed:0的情况
    在这里插入图片描述

Next: DataFrame的合并,pd.merge()

问题描述
当通过tushare两个不同的接口获得了股票数据,pro.daily_basic获得了一些技术指标信息,pro.daily获得了每日股价信息,这两个dataframe中有重复的column,想把他们合并成一个dataframe,但同时合并相同的列,保留不同的列
在这里插入图片描述
在这里插入图片描述
可以看到,二者是含有共同的column的,例如trade_date, ts_code。
问题解决
直接使用pd.merge(df1, df2)即可,因为on参数在默认的设置下,其会自动根据两个dataframe相同的列数(值也要相同)来进行合并,因此,上述的trade_date, ts_code, close就全部被合并了,合并后的columns如下
在这里插入图片描述
可以看到,相同的column已经合并了,不同的column也得以保留


Next: Pandas追加写入Excel数据

问题描述
通过Excel追加写入文件的时候,创建writer = pd.ExcelWriter(path, mode='a'),但是却产生了如下报错:

ValueError: Append mode is note supported with xlsxwriter

问题解决
产生这样问题的主要原因是因为:现在已有的的写入excel模块包含openpyxlxlsxwriterpd.ExcelWriter方法中默认的模块是xlsxwriter,但此模块不支持append追加操作,因此我们只需要更改pd.ExcelWriter方法中的默认模块即可:

# 写法1
with pd.ExcelWriter(path, mode='a', engine='openpyxl') as writer:
	df1.to_excel(writer, sheet_name='this is the first')
	df2.to_excel(writer, sheet_name='this is the second')

# 写法2
writer = pd.ExcelWriter(path, mode='a', engine='openpyxl')
df1.to_excel(wirter, sheet_name)
writer.save()
writer.close()

具体,可以参照这篇博文


Next:获取Pandas的行

问题描述
调取Pandas的某一行

问题解决
一般来说有三种解决方式

# 方法1:一个一个调用
df.loc[index, column]

# 方法2:iloc
df.iloc[index_num, column]

# 方法3:这样的方法可以调用DataFrame的行,但是不能够对列进行选择,因此默认是调用了所有的列
df[index_range]

注意:lociloc方法都可以批量调用,传入的是list, ndarray都是可以的

df.loc[a_list, :]
df.loc[index_list, column_list]

Next:对DataFrame进行批量操作

问题描述
想对DataFrame的行进行批量数量操作

问题解决
如果操作都是 同质化 的话,那么可以直接通过loc,iloc批量定位元素,然后统一进行操作

a = pd.DataFrame([[1,1,1],[1,1,1]], index=['a','b'], columns=['a','b'
  • 9
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值