gpt4 book ai didi

python - 如何使用 Pandas 转换器将数据框列拆分为多列

转载 作者:行者123 更新时间:2023-11-28 21:49:33 25 4
gpt4 key购买 nike

我有一个包含这样行的文件:

blablabla (CODE1513A15), 9.20, 9.70, 0

我希望 pandas 读取每一列,但从第一列开始,我只对括号之间的数据感兴趣,我想将其提取到其他列中。因此,我尝试使用 Pandas 转换器:

import pandas as pd
from datetime import datetime
import string

code = 'CODE'
code_parser = lambda x: {
'date': datetime(int(x.split('(', 1)[1].split(')')[0][len(code):len(code)+2]), string.uppercase.index(x.split('(', 1)[1].split(')')[0][len(code)+4:len(code)+5])+1, int(x.split('(', 1)[1].split(')')[0][len(code)+2:len(code)+4])),
'value': float(x.split('(', 1)[1].split(')')[0].split('-')[0][len(code)+5:])
}
column_names = ['first_column', 'second_column', 'third_column', 'fourth_column']
pd.read_csv('myfile.csv', usecols=[0,1,2,3], names=column_names, converters={'first_column': code_parser})

使用这段代码,我可以将括号之间的文本转换为包含日期时间对象和值的字典。

如果代码是示例中的 CODE1513A15,它将构建自:

  • 已知代码(在本例中为“CODE”)
  • 年份的两位数
  • 两位数表示一个月中的第几天
  • A 到 L 的字母,表示月份(A 表示一月,B 表示二月,...)
  • 浮点值

我测试了 lambda 函数,它正确地提取了我想要的信息,它的输出是一个字典 {'date': datetime(15, 1, 13), 'value': 15} .尽管如此,如果我打印 pd.read_csv 方法的结果,“first_column”是一个字典,而我期望它被两个名为“date”和“value”的列替换:

                         first_column  second_column  third_column  fourth_column
0 {u'date':13-01-2015, u'value':15} 9.20 9.70 0
1 {u'date':14-01-2015, u'value':16} 9.30 9.80 0
2 {u'date':15-01-2015, u'value':12} 9.40 9.90 0

我想得到的是:

               date  value  second_column  third_column  fourth_column
0 13-01-2015 15 9.20 9.70 0
1 14-01-2015 16 9.30 9.80 0
2 15-01-2015 12 9.40 9.90 0

注意:我不关心日期的格式如何,这只是我期望得到的表示。

有什么想法吗?

最佳答案

我觉得做事情还是循序渐进比较好。

# read data into a data frame
column_names = ['first_column', 'second_column', 'third_column', 'fourth_column']
df = pd.read_csv(data, names=column_names)

# extract values using regular expression which is much more robust
# than string spliting
tmp = df.first_column.str.extract('CODE(\d{2})(\d{2})([A-L]{1})(\d+)')
tmp.columns = ['year', 'day', 'month', 'value']
tmp['month'] = tmp['month'].apply(lambda m: str(ord(m) - 64))

示例输出:

print tmp 
year day month value
0 15 13 1 15

然后将您的原始数据框转换为您想要的格式

df['date'] = (tmp['year'] + tmp['day'] + tmp['month']).apply(lambda d: strptime(d, '%y%d%m'))
df['value'] = tmp['value']
del df['first_column']

关于python - 如何使用 Pandas 转换器将数据框列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33343762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com