Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从原始字符串创建数据帧_Python_String_Pandas_Dataframe - Fatal编程技术网

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?谢谢@Solar
StringIO
模拟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