从字符串Python创建数据帧
如何从如下所示的字符串(字符串的一部分)创建数据帧 ,文件_05,,\r\nx数据,y 数据\r\n-970.0、-34.12164、-959.0、-32.37526、-949.0、-30.360199、-938.0、-28.74816、-929.0、-27.53912、-25.92707、-911.0、-24.31503、-900.0、-23.64334、-891.0、-22.2997、 试图创建一个如下所示的数据帧从字符串Python创建数据帧,python,pandas,Python,Pandas,如何从如下所示的字符串(字符串的一部分)创建数据帧 ,文件_05,,\r\nx数据,y 数据\r\n-970.0、-34.12164、-959.0、-32.37526、-949.0、-30.360199、-938.0、-28.74816、-929.0、-27.53912、-25.92707、-911.0、-24.31503、-900.0、-23.64334、-891.0、-22.2997、 试图创建一个如下所示的数据帧 您应该使用python将原始数据转换为表 通过使用python导入csv包
看起来您需要字符串中的多级数据帧。我会这样做的
拆分字符串\r\n'
。然后,对于每个值,按
,”
x数据
和y数据
)。要确保您有键:[值列表],请使用
dict.setdefault(键,[]).append(值)
。这将确保数据的完整性
创建为“键:[值列表]”字典import pandas as pd
text = ',file_05,,\r\nx data,y data\r\n-970.0,-34.12164,\r\n-959.0,-32.37526,\r\n-949.0,-30.360199,\r\n-938.0,-28.74816,\r\n-929.0,-27.53912,\r\n-920.0,-25.92707,\r\n-911.0,-24.31503,\r\n-900.0,-23.64334,\r\n-891.0,-22.29997,'
line_text = [txt.split(',') for txt in text.split('\r\n')]
dct = {}
for x,y,z in line_text[2:]:
dct.setdefault(line_text[1][0], []).append(x)
dct.setdefault(line_text[1][1], []).append(y)
df = pd.DataFrame(dct)
df.columns = pd.MultiIndex.from_tuples([(line_text[0][i],line_text[1][i]) for i in [0,1]])
print (df)
其结果将是:
file_05
x data y data
0 -970.0 -34.12164
1 -959.0 -32.37526
2 -949.0 -30.360199
3 -938.0 -28.74816
4 -929.0 -27.53912
5 -920.0 -25.92707
6 -911.0 -24.31503
7 -900.0 -23.64334
8 -891.0 -22.29997
看起来您需要字符串中的多级数据帧。我会这样做的
拆分字符串\r\n'
。然后,对于每个值,按
,”
x数据
和y数据
)。要确保您有键:[值列表],请使用
dict.setdefault(键,[]).append(值)
。这将确保数据的完整性
创建为“键:[值列表]”字典import pandas as pd
text = ',file_05,,\r\nx data,y data\r\n-970.0,-34.12164,\r\n-959.0,-32.37526,\r\n-949.0,-30.360199,\r\n-938.0,-28.74816,\r\n-929.0,-27.53912,\r\n-920.0,-25.92707,\r\n-911.0,-24.31503,\r\n-900.0,-23.64334,\r\n-891.0,-22.29997,'
line_text = [txt.split(',') for txt in text.split('\r\n')]
dct = {}
for x,y,z in line_text[2:]:
dct.setdefault(line_text[1][0], []).append(x)
dct.setdefault(line_text[1][1], []).append(y)
df = pd.DataFrame(dct)
df.columns = pd.MultiIndex.from_tuples([(line_text[0][i],line_text[1][i]) for i in [0,1]])
print (df)
其结果将是:
file_05
x data y data
0 -970.0 -34.12164
1 -959.0 -32.37526
2 -949.0 -30.360199
3 -938.0 -28.74816
4 -929.0 -27.53912
5 -920.0 -25.92707
6 -911.0 -24.31503
7 -900.0 -23.64334
8 -891.0 -22.29997
在下面的代码
s
中是字符串:
import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO(s)).dropna(axis=1)
df.rename(columns={df.columns[0]: ""}, inplace=True)
顺便说一句,如果字符串来自csv文件,那么使用pd.read\u csv
直接读取文件就更简单了
编辑:此代码将创建列的多索引:
import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO(s), header = None).dropna(how="all", axis=1).T
df[0] = df.loc[1, 0]
df = df.set_index([0, 1]).T
在下面的代码
s
中是字符串:
import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO(s)).dropna(axis=1)
df.rename(columns={df.columns[0]: ""}, inplace=True)
顺便说一句,如果字符串来自csv文件,那么使用pd.read\u csv
直接读取文件就更简单了
编辑:此代码将创建列的多索引:
import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO(s), header = None).dropna(how="all", axis=1).T
df[0] = df.loc[1, 0]
df = df.set_index([0, 1]).T
OP想要创建一个数据帧而不是写入文件OP想要创建一个数据帧而不是写入文件非常有趣。谢谢分享。我不认为read_csv会计算出第一行的额外逗号。多索引解决方案甚至更好。谢谢你的更新。我打算推荐sameVery有趣的。谢谢分享。我不认为read_csv会计算出第一行的额外逗号。多索引解决方案甚至更好。谢谢你的更新。我打算推荐同样的