Python 从原始字符串创建数据帧
我有一个字符串,看起来像:Python 从原始字符串创建数据帧,python,string,pandas,dataframe,Python,String,Pandas,Dataframe,我有一个字符串,看起来像: a1\tb1\tc1\na2\tb2\tc2\na3\tb3\tc3\n... 有没有一种有效且智能的方法将此类字符串转换为数据帧?StringIO似乎不适合这种方法 提前谢谢 StringIO工作正常 import io string = 'a1\tb1\tc1\na2\tb2\tc2\na3\tb3\tc3' pd.read_csv(io.StringIO(string), delim_whitespace=True, header=None) 0
a1\tb1\tc1\na2\tb2\tc2\na3\tb3\tc3\n...
有没有一种有效且智能的方法将此类字符串转换为数据帧?StringIO似乎不适合这种方法
提前谢谢
StringIO
工作正常
import io
string = 'a1\tb1\tc1\na2\tb2\tc2\na3\tb3\tc3'
pd.read_csv(io.StringIO(string), delim_whitespace=True, header=None)
0 1 2
0 a1 b1 c1
1 a2 b2 c2
2 a3 b3 c3
您也可以使用
pd.read_table
或pd.read_fwf
的相同方式:
pd.read_table(io.StringIO(string), header=None)
或者
在最后两个示例中,假定空格是自然分隔符。但是,原始字符串必须在数据中保持一致的结构
最后,您还可以使用字符串拆分方法,首先在换行符上拆分,然后在制表符上拆分:
pd.DataFrame(list(map(str.split, string.splitlines())))
0 1 2
0 a1 b1 c1
1 a2 b2 c2
2 a3 b3 c3
Python 2.7 您只需将分隔符指定为
sep='\t'
,并将字符串设置为unicode以避免错误:
pd.read_csv(io.StringIO(u'a1\tb1\tc1\na2\tb2\tc2\na3\tb3\tc3'),
sep="\t", header=None)
0 1 2
0 a1 b1 c1
1 a2 b2 c2
2 a3 b3 c3
“StringIO似乎不适合这种方法。”
-你为什么这么认为?非常感谢你的帮助。问题是我没有编码unicode转换和delim_空格。顺便问一下,您认为哪种方法更高效、更快速:拆分一个路径还是读取csv?谢谢@SolarStringIO
模拟IO,因此我认为它将比字符串拆分慢得多。我建议根据你的数据来确定时间。如果值/单元格中也有空格,则字符串拆分将不起作用。非常感谢!!当您从外部源接收数据时,“将字符串转换为unicode”并不总是那么容易。在这种情况下可能没有问题。如果不是unicode,我会出现以下错误:TypeError:initial\u值必须是unicode或None,而不是str
您使用的是python2吗?:)你说得对,我在Jupyter上运行python3,但现在我在iPython终端上。原来内核是python2.7。感谢您指出这一点。事实上,我使用了一个字符串作为SamTools执行的结果。在本例中,pd.read\u csv(io.StringIO(unicode(结果,'utf-8')),delim\u whitespace=True)将起作用。
pd.DataFrame(list(map(str.split, string.splitlines())))
0 1 2
0 a1 b1 c1
1 a2 b2 c2
2 a3 b3 c3
pd.read_csv(io.StringIO(u'a1\tb1\tc1\na2\tb2\tc2\na3\tb3\tc3'),
sep="\t", header=None)
0 1 2
0 a1 b1 c1
1 a2 b2 c2
2 a3 b3 c3