我不能使用逗号分隔符,因为列表的第一个元素中也有逗号。
也许我必须首先在“]”处分割并创建2列,然后替换第一列中的逗号。但是我认为,这不是推荐的方法。
我尝试过的事情:
将在Excel中创建的data.csv上传到Jupiter Notebook之后,这些列似乎已消失,因此我无法使用建议的A属性。有类似的方法吗?
答案 0 :(得分:0)
您可以尝试通过在Python中创建有效的Dataframe
,然后用pandas.to_csv
输出来查看熊猫如何期望CSV数据帧被格式化(假设它应该能够自己“往返”)数据帧)。
我在https://repl.it/languages/python3上(用最少的Python和零熊猫经验)进行了以下测试:
import pandas as pd
df = pd.DataFrame({'list': [[5,6,7,8]],
'true': 0,
'amount': 210})
csv = df.to_csv(index=False)
print(csv)
输出为:
list,true,amount
"[5, 6, 7, 8]",0,210
pandas.to_csv
添加了列表字段中的前导空格,但是我怀疑pandas.read_csv
解析器是否需要它们。
无论如何我都会假设这种结果,因为这是在CSV字段中包含逗号的定义方法。带引号的字段是可选的,但包含逗号的字段必填。
因此您的CSV数据应为:
list,true,amount
"[5,6,7,8]",0,210
"[2,2,0]",1,110
"[2,7]",0,200
如果字段本身包含双引号,则重复双引号,如https://en.wikipedia.org/wiki/Comma-separated_values中的示例
1997,Ford,E350,"Super, ""luxurious"" truck"
其中字符串Super, "luxurious" truck
是包含逗号和双引号的单个字符串字段。
答案 1 :(得分:0)
首先,您正在使用的CSV文件的格式非常差。永远不要将多种数据类型放在单个列中。但是,可以分隔单个列中存在的多种数据类型。
这是您可以执行的操作:
import pandas as pd
from ast import literal_eval
df = pd.read_csv('data.csv', usecols=[0], sep=';', header=None)
colA = df[0][1:].apply(literal_eval)
print(colA.head())
输出:
>> 1 ([5, 6, 7, 8], 0, 210)
>> 2 ([2, 2, 0], 1, 110)
>> 3 ([2, 7], 0, 200)
>> Name: A, dtype: object
使用;
作为分隔符,因为该列中的任何地方都没有使用它。
colA
是熊猫系列对象。
列值被转换为3种数据类型的tuple
:List
,int
,int
。
您可以像这样遍历它们:
for row in colA:
l, t, a = row
print(f'List={l}, True={t}, Amount={a}')
输出:
>> List=[5, 6, 7, 8], True=0, Amount=210
>> List=[2, 2, 0], True=1, Amount=110
>> List=[2, 7], True=0, Amount=200