我想从列表变量中创建一个pandas数据框架。对于pd.DataFrame()
,我不能声明分隔符,这导致每个列表条目只有一列。
如果我使用pd.read_csv()
,我当然会收到以下错误
ValueError:无效的文件路径或缓冲区对象类型:
如果有一种方法可以使用pd.read_csv()
与我的列表,而不是首先将列表保存为csv并在第二步中读取csv文件?
我也尝试了pd.read_table()
,也需要一个文件或缓冲区对象。
示例数据(以制表符分隔):
Col1 Col2 Col3
12 Info1 34.1
15 Info4 674.1
测试=["Col1 tCol2 tCol3","12 tInfo1 t34.1","15 tInfo4 t674.1"]
当前解决方案:
with open(f'{filepath}tmp.csv', 'w', encoding='UTF8') as f:
[f.write(line + "n") for line in consolidated_file]
df = pd.read_csv(f'{filepath}tmp.csv', sep='t', index_col=1 )
import pandas as pd
df = pd.DataFrame([x.split('t') for x in test])
print(df)
如果你想让header作为第一行那么
df.columns = df.iloc[0]
df = df[1:]
将其转换为嵌套列表似乎更简单,就像在其他答案
import pandas as pd
test = ["Col1tCol2tCol3", "12tInfo1t34.1","15tInfo4t674.1"]
data = [line.split('t') for line in test]
df = pd.DataFrame(data[1:], columns=data[0])
,但你也可以将其转换回单个字符串(或直接从socket/network上的文件中获得单个字符串),然后你可以使用io.BytesIO
或io.StringIO
来模拟内存中的文件。
import pandas as pd
import io
test = ["Col1tCol2tCol3", "12tInfo1t34.1","15tInfo4t674.1"]
single_string = "n".join(test)
file_like_object = io.StringIO(single_string)
df = pd.read_csv(file_like_object, sep='t')
还是短
df = pd.read_csv(io.StringIO("n".join(test)), sep='t')
当你从网络(套接字,web API)获取数据作为单个字符串或数据时,这种方法很流行。