今天在一份时间序列数据的处理过程中发现了一个问题:
首先我是通过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)
两种解决方式任一种都可以解决这种问题