Python 读取、转换和写入CSV文件的列内容

Python 读取、转换和写入CSV文件的列内容,python,csv,Python,Csv,我正在尝试将.csv文件中的日期列从月/日/年更改为时间戳格式 我想改变这个 VIX Close,Date,VIX High,VIX Low,VIX Open 18.22,1/2/2004,18.68,17.54,17.96 17.49,1/5/2004,18.49,17.44,18.45 16.73,1/6/2004,17.67,16.19,17.66 15.5,1/7/2004,16.75,15.5,16.72 VIX Close,Date,VIX High,VIX L

我正在尝试将.csv文件中的日期列从月/日/年更改为时间戳格式

我想改变这个

VIX Close,Date,VIX High,VIX Low,VIX Open  
18.22,1/2/2004,18.68,17.54,17.96  
17.49,1/5/2004,18.49,17.44,18.45  
16.73,1/6/2004,17.67,16.19,17.66  
15.5,1/7/2004,16.75,15.5,16.72  
VIX Close,Date,VIX High,VIX Low,VIX Open  
18.22,1073023200.0,18.68,17.54,17.96  
17.49,1073282400.0,18.49,17.44,18.45  
16.73,1073368800.0,17.67,16.19,17.66  
15.5,1073455200.0,16.75,15.5,16.72  
对此

VIX Close,Date,VIX High,VIX Low,VIX Open  
18.22,1/2/2004,18.68,17.54,17.96  
17.49,1/5/2004,18.49,17.44,18.45  
16.73,1/6/2004,17.67,16.19,17.66  
15.5,1/7/2004,16.75,15.5,16.72  
VIX Close,Date,VIX High,VIX Low,VIX Open  
18.22,1073023200.0,18.68,17.54,17.96  
17.49,1073282400.0,18.49,17.44,18.45  
16.73,1073368800.0,17.67,16.19,17.66  
15.5,1073455200.0,16.75,15.5,16.72  
我尝试了很多方法,我可以让它打印出我想要的重新格式化日期,但下面是我尝试将其写入csv列的多种方法之一。
什么是最具python风格的方式来让它读取,并立即在不需要太多步骤的情况下编写所需的转换,这就是我在尝试实现这一点时需要考虑的问题

with open('testvix.csv', 'wb') as myFile:
    reader = csv.writer(myFile, delimiter=',')
    reader.writerow([(time.mktime(time.strptime(row[1], "%m/%d/%Y")))])
返回

Traceback (most recent call last):
File "<stdin>", line 3, in <module>
TypeError: a bytes-like object is required, not 'str'  
回溯(最近一次呼叫最后一次):
文件“”,第3行,在
TypeError:需要类似字节的对象,而不是“str”
我肯定我错过了某种通过csv的迭代。我还无法使用pandas在网上找到解决问题的方法

import pandas as pd
import time

df = pd.read_csv('file.csv', sep=',')
df['Date'] = df['Date'].apply(lambda x: time.mktime(time.strptime(x, "%m/%d/%Y")))

# Save to a new file or overwrite your file
df.to_csv('file2.csv', sep=',')
,波动率指数收盘,日期,波动率指数高位,波动率指数低位,波动率指数开盘
0,18.221075586400.0,18.68,17.54,17.96
1,17.491083358800.0,18.49,17.44,18.45
2,16.731086037200.0,17.67,16.19,17.66
3,15.51088629200.0,16.75,15.5,16.72

使用熊猫

import pandas as pd
import time

df = pd.read_csv('file.csv', sep=',')
df['Date'] = df['Date'].apply(lambda x: time.mktime(time.strptime(x, "%m/%d/%Y")))

# Save to a new file or overwrite your file
df.to_csv('file2.csv', sep=',')
,波动率指数收盘,日期,波动率指数高位,波动率指数低位,波动率指数开盘
0,18.221075586400.0,18.68,17.54,17.96
1,17.491083358800.0,18.49,17.44,18.45
2,16.731086037200.0,17.67,16.19,17.66
3,15.51088629200.0,16.75,15.5,16.72


出于好奇,你为什么叫writer
reader
,好像你没有其他事情要担心似的?可能是“why do you call the writer reader”的重复,只是因为我在网上的不同地方粘贴了我的解决方案。DyZ,我的问题不仅仅是“类似字节”的对象问题。我不会从帖子中的问题或答案中找到解决方案。我的问题更多的是在csv中读写一列。你的问题是在二进制模式下打开文件。只是出于好奇,为什么你调用writer
reader
,好像你没有其他事情要担心一样?可能重复“why do call the writer reader”仅从粘贴我在不同位置的解决方案online.DyZ开始,我的问题不仅仅是“类似字节”的对象问题。我不会从帖子中的问题或答案中找到解决方案。我的问题更多的是在csv中读写一列。你的问题是在二进制模式下打开文件。谢谢。虽然我不需要导入datetime,也不需要'date_format=“%d/%m/%Y”,也不需要将最长的行缩短为df['date']=df['date'].apply(lambda x:time.mktime(time.strtime(x),%m/%d/%Y))。是否要更改您的答案,我将给它绿色的复选框?@Renoldus我已编辑了我的答案。
sep
确定csv列分隔符,lambda是一个匿名函数,应用于每个
['Date']
每行中的值。它可能是一个常规函数,接收
x
作为日期字符串,并返回
time.mktime(time.strtime(x,“%m/%d/%Y”))
以及.CSV文件可以使用不同的分隔符(或分隔符)。逗号、分号、管道、选项卡等。这只是指定熊猫(或CSV模块)的使用方式应该读/写文件。您可以将
index=False
传递到
df.to_csv
以删除列索引。如果您的日期格式不一致,您应该像以前一样使用
datetime
解析每个日期。谢谢。尽管我可以不导入datetime,也可以不导入'date_format=“%d/%m/%Y”'并将最长的行缩短为df['Date']=df['Date'].apply(lambda x:time.mktime(time.strtime(x,“%m/%d/%Y”)。是否要更改您的答案,我将给它绿色的复选框?@Renoldus我已编辑了我的答案。
sep
确定csv列分隔符,lambda是一个匿名函数,应用于每个
['Date']
每行中的值。它可能是一个常规函数,接收
x
作为日期字符串,并返回
time.mktime(time.strtime(x,“%m/%d/%Y”))
以及.CSV文件可以使用不同的分隔符(或分隔符)。逗号、分号、管道、选项卡等。这只是指定熊猫(或CSV模块)的使用方式应该读取/写入文件。您可以将
index=False
传递到
df.to_csv
以删除列索引。如果日期格式不一致,您应该像以前一样使用
datetime
解析每个日期。