将列中的长列表转换为新的df

时间:2019-09-26 12:09:41

标签: python pandas sorting dataframe plot

我有一个很大的df,在要绘制的列中有一个列表。该列的外观与此类似:

tracking_information
'438 673.4841918945312 1552924050927 ; 666 709.5 1552924050911 ; 344...'
'343 775.5 1552924084000 ; 460.4154052734375 669 1552924084020 ; 403...'

第一个数字是x坐标,第二个y是时间戳,第三个是时间戳。该列表每行有1000个条目。 我尝试将其装配到.array()中,但由于格式原因,我无法做到这一点。我还尝试将其转换为int,然后使用pd.Series,该错误也不会导致任何错误。

理想情况下,每一行都会创建一个新的df,标题为x,y,timestamp,每个值都分隔在一行中,类似于:

df2:
x, y, z
438, 673.4841918945312, 1552924050927 
666, 709.5, 1552924050911

3 个答案:

答案 0 :(得分:0)

1>创建三个单独的列表
2>遍历数据框的行和列,并(如您提到的那样,您的单元格是列表),然后遍历列表,将其值划分为上面创建的列表 3>现在绘制图形。 评论以获得更多帮助,谢谢。

答案 1 :(得分:0)

尝试以下代码:

样本输入:

import pandas as pd
df_inp = pd.DataFrame({"col1":["438 673.4841918945312 1552924050927 ; 666 709.5 1552924050911 ;", "438 673.4841918945312 1552924050927 ; 666 709.5 1552924050911 ;","343 775.5 1552924084000 ; 460.4154052734375 669 1552924084020 ;"]})

输出:

col1
0   438 673.4841918945312 1552924050927 ; 666 709....
1   438 673.4841918945312 1552924050927 ; 666 709....
2   343 775.5 1552924084000 ; 460.4154052734375 66...

现在尝试以下方法转换为所需的DF格式:

def expand_input(inp):
    return [x.strip().split(" ") for x in inp.split(";")]

pd.DataFrame([
    list_vars for x in df_inp["col1"].apply(expand_input).iteritems() for list_vars in x[1] if list_vars[0]
],  columns=["x","y","z"])

输出:

  x y    z
0   438 673.4841918945312   1552924050927
1   666 709.5   1552924050911
2   438 673.4841918945312   1552924050927
3   666 709.5   1552924050911
4   343 775.5   1552924084000
5   460.4154052734375   669 1552924084020

答案 2 :(得分:-1)

这就是你想要的

test = ['438;666;344','asd;aweq;ascx']
df = pd.DataFrame(test)
splittedDf=df[0].str.split(' ')
arr = []
for i in range(len(splittedDf)):
   arr.append(splittedDf[i])
new_df = pd.DataFrame(arr)
print(new_df)