Python 将列中的长列表转换为新df
我有一个巨大的df,在我想要绘制的列中有一个列表。该列的外观与此类似:Python 将列中的长列表转换为新df,python,pandas,sorting,dataframe,plot,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...' df2: x, y, z 438, 673.4841918945312, 155292405
tracking_information
'438 673.4841918945312 1552924050927 ; 666 709.5 1552924050911 ; 344...'
'343 775.5 1552924084000 ; 460.4154052734375 669 1552924084020 ; 403...'
df2:
x, y, z
438, 673.4841918945312, 1552924050927
666, 709.5, 1552924050911
第一个数字是x坐标,第二个是y坐标,第三个是时间戳。列表中每行有1000个条目。
我尝试将其放入.array()中,但由于格式问题,我无法这样做。我还尝试将其转换为int,然后使用pd.Series,这只会导致错误
理想情况下,每一行创建一个新的df,标题x、y、时间戳和每一个值在一行中分开,如下所示:
tracking_information
'438 673.4841918945312 1552924050927 ; 666 709.5 1552924050911 ; 344...'
'343 775.5 1552924084000 ; 460.4154052734375 669 1552924084020 ; 403...'
df2:
x, y, z
438, 673.4841918945312, 1552924050927
666, 709.5, 1552924050911
1> 创建三个单独的列表
2> 迭代您的数据帧行和列(正如您提到的,您的单元格就是列表),然后迭代列表将其值划分为上面创建的列表 3> 现在绘制图表。 评论以获取更多帮助,谢谢。请尝试以下代码: 样本输入:
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...
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
现在,请尝试将下面的格式转换为所需的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"])
输出:
col1
0 438 673.4841918945312 1552924050927 ; 666 709....
1 438 673.4841918945312 1552924050927 ; 666 709....
2 343 775.5 1552924084000 ; 460.4154052734375 66...
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
这是你想要的
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)