我有一个字符串,看起来像这样:
a1\tb1\tc1\na2\tb2\tc2\na3\tb3\tc3\n...
有一种高效而智能的方法将这种字符串转换为Pandas DataFrame吗?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.read_fwf(io.StringIO(string), header=None)
0 1 2
0 a1 b1 c1
1 a2 b2 c2
2 a3 b3 c3
pd.DataFrame(list(map(str.split, string.splitlines())))
0 1 2
0 a1 b1 c1
1 a2 b2 c2
2 a3 b3 c3
StringIO
模拟 IO,因此我认为它比字符串分割要慢得多。我建议在您的数据上计时。如果您的值/单元格中也有空格,则无法使用字符串分割。 - cs95Python 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
TypeError: initial_value must be unicode or None, not str
。 - Mabel Villalba