转换CSV数据?

2024-10-03 15:23:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,如果这很简单,请原谅。我有一个csv文件,其中包含以下数据:

Symbol,date,price
apple, 23/12/2016, 50
apple, 26/12/2016, 51
apple, 27/12/2016, 52
google,23/12/2016, 70
google,26/12/2016, 71
google,27/12/2016, 72

我需要编写一个新的csv文件,如下所示:

^{pr2}$

到目前为止,我得到的代码如下。然而,我似乎无法将符号理解为列。在

import csv
import os

csv.register_dialect(
    'mydialect',
    delimiter =',',
    )

symbol, date=[],[]

with open('EB_CUT2.csv',"rt") as dfile:
    thedata = csv.reader(dfile, dialect ='mydialect')
    for row in thedata:
        if row[4] not in date:
            date.append(row[4])
        if row[0] not in symbol:
            symbol.append(row[0])
dfile.close()

ebout = open('EB_CUT.csv',"wt",newline='')
wr = csv.writer(ebout)
for val in date:
    wr.writerow([val])
ebout.close()

Tags: 文件csvinimportappledategoogleopen
2条回答

熊猫解决方案:

import pandas 

df = pd.read_csv('EB_CUT2.csv', index_col=1, parse_dates=True)
df2 = pd.pivot_table(df, values='price', columns=['Symbol'], index=df.index)
df2.to_csv('EB_CUT.csv')

{cd1>内容:

^{pr2}$

非熊猫解决方案:

import csv
from datetime import datetime
import os

MY_DIALECT = 'mydialect'
csv.register_dialect(MY_DIALECT, delimiter =',', skipinitialspace=True,)

daily_prices = {}
with open('EB_CUT2.csv', "rt", newline='') as dfile:
    reader = csv.DictReader(dfile, dialect=MY_DIALECT)
    for row in reader:
        date = datetime.date(datetime.strptime(row['date'], '%d/%m/%Y'))
        entry = daily_prices.setdefault(date, {})
        entry[row['Symbol']] = row['price']

all_symbols = sorted(
    set(symbol for value in daily_prices.values() for symbol in value))

with open('EB_CUT.csv', "wt", newline='') as ebout:
    writer = csv.writer(ebout)
    writer.writerow(['Date'] + all_symbols) # header
    for date, prices in sorted(daily_prices.items()):
        row = [date.strftime('%d/%m/%Y')]
        for symbol in all_symbols:
            row.append(prices.get(symbol, ''))
        writer.writerow(row)

如果您想从任何现有的'EB_CUT.csv'文件中有效地初始化daily_prices字典(与上面所示的最后一步相反,您可能会从下面关于希望在以后合并到更多csv文件中的注释中听到这种情况),则下面的代码将执行此操作:

^{pr2}$

读取当前csv文件以初始化它的另一种方法是始终以您选择的任何格式将与当前csv文件相对应的daily_prices数据保存在单独的文件中。通过使用picklejson模块,可以非常容易地将其写入和读回。在

相关问题 更多 >