2017-06-19 152 views
1

我对pandas.read_csv函数有一个奇怪的问题。我将数据框导出到csv中,但是当我重新导入相同的csv时,当我尝试合并时,导入的数据不起作用(合并显示了左侧的所有数据,没有尝试过合并)。如果我在将原始数据导出到csv之前使用原始数据,则它工作得很好(合并是完美的)。python熊猫导出csv格式不同于导入的问题

df = df.values_list('id','teacher_id','uniquecount','nonuniquecount','msgcount','ordercount','date','updated','timestamp', flat=False) 
#inserting the collected data into a dateframe for manipulation 
df = pd.DataFrame(list(df)) 
#giving the dataframe column names 
df.columns = ['id','teacher_id','uniquecount','nonuniquecount','msgcount','ordercount','date','updated','timestamp'] 
df = df[['id','teacher_id','uniquecount','nonuniquecount','msgcount','ordercount','date']] 
#rename required columns 
df.rename(columns={'uniquecount':'Unique Views','nonuniquecount':'Views','msgcount':'Messages','ordercount':'Orders'}, inplace=True) 

print df 
print df.dtypes 
# exporting df out to a csv 
# df.to_csv('test.csv', header=True) 
# importing the df back from a csv 
df = pd.read_csv('test.csv', index_col=0) 
print df 
print df.dtypes 

#insert dates 
numdays = 14 
base = datetime.datetime.today().date() 
date_list = [base - datetime.timedelta(days=x) for x in range(0, numdays)] 
dates = pd.DataFrame(date_list) 
dates.columns = ['date'] 

#merge the complete dates with the dateframe 
df = pd.merge(dates ,df , on=['date'] , how='left') 
# print df 

我已经确认并比较了dataframes长得一模一样出口前从CSV导入后,(我打印输出的两倍,出口前和一个后一次),我也查了一下datetypes是全部都一样。

我需要导出csv与外部环境一起工作,因为我不能附加我的本地数据库。

附CMDLINE打印的副本显示,这两个dataframes是完全相似的

cmd line interface image

附在下面是我导出的csv样品

,id,teacher_id,Unique Views,Views,Messages,Orders,date 
0,47,31,1,6,0,0,2017-05-09 
1,56,31,1,9,0,0,2017-05-10 
2,67,31,2,11,0,0,2017-05-14 
3,71,31,3,15,0,0,2017-05-15 
4,79,31,3,17,0,0,2017-06-12 
5,83,31,3,18,0,1,2017-06-18 

有没有人有任何想法这个奇怪的问题?

回答

1

之前调用合并,尝试转换使用to_datetime第一这两个日期被称为在回答here

df.date = pd.to_datetime(df.date) 
dates.date = pd.to_datetime(dates.date) 

#merge the complete dates with the dateframe 
df = pd.merge(dates ,df , on=['date'] , how='left') 
+0

谢谢。我想我错过的是,当我重新导入数据帧时,日期格式在导出后丢失了,这就是为什么它不起作用,我需要再次在重新导入的csv中重新定义它作为日期格式在它工作之前。 – user3655574

+0

@ user3655574 np!我很高兴它的工作。 '快乐的编码' – 0p3n5ourcE