【发布时间】:2017-02-17 13:05:02
【问题描述】:
我在 csv 文件中有以下数据:
from StringIO import StringIO
import pandas as pd
the_data = """
ABC,2016-6-9 0:00,95,{'//Purple': [115L], '//Yellow': [403L], '//Blue': [16L], '//White-XYZ': [0L]}
ABC,2016-6-10 0:00,0,{'//Purple': [219L], '//Yellow': [381L], '//Blue': [90L], '//White-XYZ': [0L]}
ABC,2016-6-11 0:00,0,{'//Purple': [817L], '//Yellow': [21L], '//Blue': [31L], '//White-XYZ': [0L]}
ABC,2016-6-12 0:00,0,{'//Purple': [80L], '//Yellow': [2011L], '//Blue': [8888L], '//White-XYZ': [0L]}
ABC,2016-6-13 0:00,0,{'//Purple': [32L], '//Yellow': [15L], '//Blue': [4L], '//White-XYZ': [0L]}
DEF,2016-6-16 0:00,0,{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [3L]}
DEF,2016-6-17 0:00,0,{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [0L]}
DEF,2016-6-18 0:00,0,{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [7L]}
DEF,2016-6-19 0:00,0,{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [14L]}
DEF,2016-6-20 0:00,0,{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [21L]}
"""
我将数据读入一个Pandas数据框,如下:
df = pd.read_csv(StringIO(the_data), sep=',', header=None)
“公司”和“日期”字段永远不会改变。
但是,花括号内的“键”(例如"//PurpleCar"、"//YellowCar"、"//BlueCar"、"//WhiteCar"、"//BlackCar"、"//BlackCar"和"NPO-GreenCar")是不是静态的。它们可以(也将)经常变化。
(注意:我有另一个脚本输出字典并“创建”这个文本文件,因此这个数据结构)
我想让数据框显示如下,以便我可以使用 Matplotlib 创建可视化:
Company Date Purple Yellow Blue White-XYZ Black Pink NPO-Green
0 ABC 2016-6-9 115 403 16 0 0 0 0
1 ABC 2016-6-10 219 381 90 0 0 0 0
2 ABC 2016-6-11 817 21 31 0 0 0 0
3 ABC 2016-6-12 80 2011 8888 0 0 0 0
4 ABC 2016-6-13 32 15 4 0 0 0 0
5 DEF 2016-6-16 32 0 0 0 15 4 3
6 DEF 2016-6-17 32 0 0 0 15 4 0
7 DEF 2016-6-18 32 0 0 0 15 4 7
8 DEF 2016-6-19 32 0 0 0 15 4 14
9 DEF 2016-6-20 32 0 0 0 15 4 21
我面临的问题是:
a) 将“键”值向上移动到列标题
b) 允许“键”值是动态的(同样,它们可以并且将会改变)
c) 删除方括号('[' 和 ']')
d) 删除双斜杠 ('//')
e) 去掉数值后面的“L”
上面的“c”、“d”和“e”点可以通过以下问题(相关)来解决:
我正在努力解决的是“a”和“b”点。
有人知道解决这些问题的方法吗?
谢谢!
* 更新 *
最初发布的数据有一个小错误。这是数据:
the_data = """
ABC,2016-6-9 0:00,95,"{'//Purple': [115L], '//Yellow': [403L], '//Blue': [16L], '//White-XYZ': [0L]}"
ABC,2016-6-10 0:00,0,"{'//Purple': [219L], '//Yellow': [381L], '//Blue': [90L], '//White-XYZ': [0L]}"
ABC,2016-6-11 0:00,0,"{'//Purple': [817L], '//Yellow': [21L], '//Blue': [31L], '//White-XYZ': [0L]}"
ABC,2016-6-12 0:00,0,"{'//Purple': [80L], '//Yellow': [2011L], '//Blue': [8888L], '//White-XYZ': [0L]}"
ABC,2016-6-13 0:00,0,"{'//Purple': [32L], '//Yellow': [15L], '//Blue': [4L], '//White-XYZ': [0L]}"
DEF,2016-6-16 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [3L]}"
DEF,2016-6-17 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [0L]}"
DEF,2016-6-18 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [7L]}"
DEF,2016-6-19 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [14L]}"
DEF,2016-6-20 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [21L]}"
"""
此数据与原始数据的区别在于左大括号 ("{") 之前和右大括号 ("}") 之后的撇号 (")。
【问题讨论】:
-
我已在您的另一个问题中提交了答案:stackoverflow.com/a/39936698/218508