将变量处理为带有pandas数据框架的文件



我想从列表变量中创建一个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.BytesIOio.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)获取数据作为单个字符串或数据时,这种方法很流行。

最新更新