import pandas as pd data1=pd.read_excel(r"D:\360安全浏览器下载\提取数字.xlsx") #定一个一个函数传入多个字典字符串返回一个列表 def f1(x): a=[] if pd.isna(x)==True: return x x=eval("["+x+"]") for i in x: b=[i["month"],i["distance"]] c=b.copy() a.append(c) a.sort(key=lambda j:j[0],reverse=False) return a f1(data1.iloc[0,1]) #生成里程1临时变量,方便进行后续的处理 data1["里程_temp"]=data1["里程"].map(f1) #记录每笔订单的最多里程记录次数 data1["times"]=data1["里程_temp"].map(lambda x:len(x) if isinstance(x,list) else x) data1["times"].value_counts #可以看到最大记录了6次,但是也有2次5次等情况 #生成我们想要的列 def f2(x,time,what): if isinstance(x,list): if len(x)>time: return x[time][what] else: return np.nan else: return np.nan data1["日期1"]=data1["里程_temp"].map(lambda x:f2(x,0,0)) data1["里程1"]=data1["里程_temp"].map(lambda x:f2(x,0,1)) data1["日期2"]=data1["里程_temp"].map(lambda x:f2(x,1,0)) data1["里程2"]=data1["里程_temp"].map(lambda x:f2(x,1,1)) data1["日期3"]=data1["里程_temp"].map(lambda x:f2(x,2,0)) data1["里程3"]=data1["里程_temp"].map(lambda x:f2(x,2,1)) data1["日期4"]=data1["里程_temp"].map(lambda x:f2(x,3,0)) data1["里程4"]=data1["里程_temp"].map(lambda x:f2(x,3,1)) data1["日期5"]=data1["里程_temp"].map(lambda x:f2(x,4,0)) data1["里程5"]=data1["里程_temp"].map(lambda x:f2(x,4,1)) data1["日期6"]=data1["里程_temp"].map(lambda x:f2(x,5,0)) data1["里程6"]=data1["里程_temp"].map(lambda x:f2(x,5,1))
看看是不是这样