pandas read_csv和to_csv 索引的读入与保存问题

今天在一份时间序列数据的处理过程中发现了一个问题:

首先我是通过read_csv将数据读入
然后把id列去掉,将date列设置为索引。之后将date列的数据转化为标准格式,代码如下:

import pandas as pd
air = pd.read_csv(’…/forecast pm25/weather.csv’, index_col=7)
air.head(10)

在这里插入图片描述
数据如上。
接下来去掉ID列,并且date标准化

weather = air[air.columns.difference([‘id’])]
weather.index = pd.to_datetime(weather.index)
weather.head()
在这里插入图片描述
以上就是处理好的数据。然后我把它保存成csv

ex_path = ‘…/forecast pm25/adj_weather.csv’
weather.to_csv(ex_path)

然后我用pandas查看导出的数据(问题来了!):
test_path = ‘…/forecast pm25/adj_weather.csv’
weather = pd.read_csv(test_path)
在这里插入图片描述
数据变成了这样,原来的索引列在to_csv的时候被当做内容保存在了第一列。
之后我查看下边他的博客才发现
https://blog.csdn.net/kwame211/article/details/80982840
原来,to_csv过程中会将原来的索引看作内容保存进去再次直接read_csv就会把原来的索引变为内容,然后自己再加一层索引!所以假如你又直接to_csv那么又会加一层索引进去。所以解决方法是:

第一种解决方式:不存索引

df.to_csv(path,index=False,header=False)
第二种解决方式:声明文件第一列为索引,第一行为列名(默认就是,不必重新申明)

aa = pd.read_csv(path,index_col=0,header=0)
两种解决方式任一种都可以解决这种问题

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值