【问题标题】:Recursively create a new Data Frame using for loop使用 for 循环递归地创建一个新的数据框
【发布时间】:2021-10-09 21:46:51
【问题描述】:

我有一个我写的下面的代码它为不同的序列号字符长度创建一个新的数据帧,最后我将所有数据帧附加在一起以获得最终输出。

我正在尝试找到一种更好的方法来编写此代码。我可以使用 for 循环来做到这一点吗?

data["Serial Number"] = data['Serial Number'].str.zfill(28)
print ("Fetch Serial Number with 28 characters")
data["Output"] = data['Serial Number'].apply(lambda x: fetch_by_ser_no(x))
data.to_excel(r'first.xlsx',index = False)
data.loc[:,"itemlen"] = data["Output"].str.len()
data.loc[:,"SNlen"] = data["Serial Number"].str.len()
df = data.loc[(data['itemlen']== 1)& (data['SNlen'] == 28)]
data.drop(data[(data['SNlen'] == 28  ) & (data['itemlen'] == 1) ].index,inplace = True)
df.to_excel(r'raw.xlsx',index = False)


data["Serial Number"] = data['Serial Number'].str.zfill(30)
print ("Fetch Serial Number with 30 characters")
data["Output"] = data['Serial Number'].apply(lambda x: fetch_by_ser_no(x))
data.loc[:,"itemlen"] = data["Output"].str.len()
data.loc[:,"SNlen"] = data["Serial Number"].str.len()
df1= data.loc[(data['itemlen']== 1)& (data['SNlen'] == 30)]
data.drop(data[(data['SNlen'] == 30  ) & (data['itemlen'] == 1) ].index,inplace = True)
df1.to_excel(r'raw1.xlsx',index = False)


data["Serial Number"] = data['Serial Number'].str.zfill(32)
print ("Fetch Serial Number with 32 characters")
data["Output"] = data['Serial Number'].apply(lambda x: fetch_by_ser_no(x))
data.loc[:,"itemlen"] = data["Output"].str.len()
data.loc[:,"SNlen"] = data["Serial Number"].str.len()
df2= data.loc[(data['itemlen']== 1)& (data['SNlen'] == 32)]
data.drop(data[(data['SNlen'] == 32  ) & (data['itemlen'] == 1) ].index,inplace = True)
df2.to_excel(r'raw2.xlsx',index = False)

data["Serial Number"] = data['Serial Number'].str.zfill(34)
print ("Fetch Serial Number with 34 characters")
data["Output"] = data['Serial Number'].apply(lambda x: fetch_by_ser_no(x))
data.loc[:,"itemlen"] = data["Output"].str.len()
data.loc[:,"SNlen"] = data["Serial Number"].str.len()
data = data.append([df,df1,df2])

【问题讨论】:

  • 是的..我在函数或for循环之间争论?最好的方法是什么?我想为序列号字符长度 28、30、32 和 34 执行此操作。

标签: python pandas


【解决方案1】:

循环

data = {}
i = 28
data1 = []
while i <= 34:
    data["Serial Number"] = data['Serial Number'].str.zfill(i)
    print("Fetch Serial Number with" + i + "characters")
    data["Output"] = data['Serial Number'].apply(lambda x: fetch_by_ser_no(x))
    data.to_excel(r'first.xlsx',index = False)
    data.loc[:,"itemlen"] = data["Output"].str.len()
    data.loc[:,"SNlen"] = data["Serial Number"].str.len()
    df = data.loc[(data['itemlen']== 1)& (data['SNlen'] == i)]
    data.drop(data[(data['SNlen'] == i  ) & (data['itemlen'] == 1) ].index,inplace = True)
    data1.append(df)
    i = i + 2

【讨论】:

  • 如何将数据框打印到excel?
  • data1[n] 是您的每个数据框。要打印第一个,data1[0].to_excel(r'raw1.xlsx',index = False)
  • 我不想在最后一次迭代中删除行。如果您看到我的代码,则 34 的最后一个循环略有不同。当我运行 34 个字符的序列号代码时,我使用 itemlen = 0 & 1 保存数据
  • 哦,我明白了。添加一个if i != 24: 声明,你应该很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多