如何在Python中从原始文本转换成Pandas Dataframe ?

8e2ybdfx  于 2023-03-06  发布在  Python
关注(0)|答案(6)|浏览(209)

我有一个文本文件,其中包含类似这样的数据,格式为列表,其中第一个元素是一个字符串,包含用'分隔的列名;',接下来的元素是值行:

['Timestamp;T;Pressure [bar];Input line pressure [bar];Speed [rpm];Angular Position [degree];Wheel speed [rpm];Wheel angular position [degree];',
';1;5,281;5,303;219,727;10,283;216,363;45;',
';1;5,273;5,277;219,727;11,602;216,363;45;',
';1;5,288;5,293;205,078;12,832;216,363;45;',
';1;5,316;5,297;219,727;14,15;216,363;45;',
';1;5,314;5,307;219,727;15,469;216,363;45;',
';1;5,288;5,3;219,727;16,787;216,363;45;',
';1;5,318000000000001;5,31;219,727;18,105;216,363;45;',
';1;5,304;5,3;219,727;19,424;216,388;56,25;',
';1;5,291;5,29;219,947;20,742;216,388;56,25;',
';1;5,316;5,297;219,507;22,061;216,388;56,25;']

我怎样才能把这个文本列表转换成Pandas Dataframe 呢?

piztneat

piztneat1#

使用pd.read_csv(从文本文件读取 Dataframe )和pd.compat.StringIO(从文本生成流),如io.StingIO

pd.read_csv(pd.compat.StringIO("\n".join(lines)), sep=";")
njthzxwz

njthzxwz2#

代码:

df = [
    'Timestamp;T;Pressure [bar];Input line pressure [bar];Speed [rpm];Angular Position [degree];Wheel speed [rpm];Wheel angular position [degree];',
    ';1;5,281;5,303;219,727;10,283;216,363;45;',
    ';1;5,273;5,277;219,727;11,602;216,363;45;',
    ';1;5,288;5,293;205,078;12,832;216,363;45;',
    ';1;5,316;5,297;219,727;14,15;216,363;45;',
    ';1;5,314;5,307;219,727;15,469;216,363;45;',
    ';1;5,288;5,3;219,727;16,787;216,363;45;',
    ';1;5,318000000000001;5,31;219,727;18,105;216,363;45;',
    ';1;5,304;5,3;219,727;19,424;216,388;56,25;',
    ';1;5,291;5,29;219,947;20,742;216,388;56,25;',
    ';1;5,316;5,297;219,507;22,061;216,388;56,25;']

mat = [n.split(';') for n in df]
print(mat)
newdf1 = pd.DataFrame(mat)
newdf1.columns = newdf1.iloc[0]
newdf1 = newdf1.reindex(newdf1.index.drop(0))
# newdf2 = pd.DataFrame.from_dict(df)
print(newdf1)

输出:

0  Timestamp  T     Pressure [bar] Input line pressure [bar] Speed [rpm]  \
1             1              5,281                     5,303     219,727   
2             1              5,273                     5,277     219,727   
3             1              5,288                     5,293     205,078   
4             1              5,316                     5,297     219,727   
5             1              5,314                     5,307     219,727   
6             1              5,288                       5,3     219,727   
7             1  5,318000000000001                      5,31     219,727   
8             1              5,304                       5,3     219,727   
9             1              5,291                      5,29     219,947   
10            1              5,316                     5,297     219,507   

0  Angular Position [degree] Wheel speed [rpm]  \
1                     10,283           216,363   
2                     11,602           216,363   
3                     12,832           216,363   
4                      14,15           216,363   
5                     15,469           216,363   
6                     16,787           216,363   
7                     18,105           216,363   
8                     19,424           216,388   
9                     20,742           216,388   
10                    22,061           216,388   

0  Wheel angular position [degree]    
1                               45    
2                               45    
3                               45    
4                               45    
5                               45    
6                               45    
7                               45    
8                            56,25    
9                            56,25    
10                           56,25
lnxxn5zx

lnxxn5zx3#

您可以使用函数from_records()拆分输入列表中的每个字符串项,并注意数据的第一行包含列标签这一事实

>>> data = ['Timestamp;T;Pressure [bar];Input line pressure [bar];Speed \
[rpm];Angular Position [degree];Wheel speed [rpm];Wheel angular position [degree];', \
';1;5,281;5,303;219,727;10,283;216,363;45;', \
';1;5,273;5,277;219,727;11,602;216,363;45;', \
';1;5,288;5,293;205,078;12,832;216,363;45;', \
';1;5,316;5,297;219,727;14,15;216,363;45;', \
';1;5,314;5,307;219,727;15,469;216,363;45;', \
';1;5,288;5,3;219,727;16,787;216,363;45;', \
';1;5,318000000000001;5,31;219,727;18,105;216,363;45;', \
';1;5,304;5,3;219,727;19,424;216,388;56,25;', \
';1;5,291;5,29;219,947;20,742;216,388;56,25;', \
';1;5,316;5,297;219,507;22,061;216,388;56,25;']

>>> df = pd.DataFrame.from_records([r.split(';') for r in data[1:]], columns=data[0].split(';'))

>>> df
  Timestamp  T     Pressure [bar] Input line pressure [bar] Speed [rpm]  \
0            1              5,281                     5,303     219,727
1            1              5,273                     5,277     219,727
2            1              5,288                     5,293     205,078
3            1              5,316                     5,297     219,727
4            1              5,314                     5,307     219,727
5            1              5,288                       5,3     219,727
6            1  5,318000000000001                      5,31     219,727
7            1              5,304                       5,3     219,727
8            1              5,291                      5,29     219,947
9            1              5,316                     5,297     219,507

 ...
mftmpeh8

mftmpeh84#

基于@Nihal解决方案的较短基础

df = [n.split(';') for n in raw_data_text]
df = pd.DataFrame(df[1:], columns=df[0])
2nbm6dog

2nbm6dog5#

如果只有逗号分隔值作为模型的输出-您可以使用此转换为Pandas Dataframe (内容是您在streamlit应用程序中的输出)

out = [line.split(",") for line in content.strip().split("\n")]
df1 = pd.DataFrame(out)
df1.columns = df1.iloc[0]
df1 = df1.reindex(df1.index.drop(0))
st.write(df1)
fnvucqvd

fnvucqvd6#

首先你可以创建变量read_file,用pandas.read_csv()函数打开它,然后用read_file.to_csv()函数把它转换成csv文件,再用pd.read_csv()打开 Dataframe 。

read_file = pd.read_csv('variable.txt', sep = ';')
df = read_file.to_csv ('variable.csv', index=None)
df = pd.read_csv('variable.csv')

我相信相同/相似问题的答案可以在这里找到:Load data from txt with pandas

相关问题