Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何填写列表中的值并将其转换为数据帧?(第二部分)_Python_Pandas_List_Dataframe_Numpy - Fatal编程技术网

Python 如何填写列表中的值并将其转换为数据帧?(第二部分)

Python 如何填写列表中的值并将其转换为数据帧?(第二部分),python,pandas,list,dataframe,numpy,Python,Pandas,List,Dataframe,Numpy,我有上一个问题的修改数据框: 我想使用前一个问题中关于两个字段的代码: photo_df= df1.fillna('').filter(like='Photo') vals = [(i, y) for i, x in enumerate(photo_df.to_numpy()) for y in vals[:3] + [['PH',z] for z in photo_df.columns[x!='']]] 我尝试的是: photo_df= df1.fi

我有上一个问题的修改数据框:

我想使用前一个问题中关于两个字段的代码:

photo_df= df1.fillna('').filter(like='Photo')
vals = [(i, y) for i, x in enumerate(photo_df.to_numpy())
          for y in vals[:3] + [['PH',z] 
          for z in photo_df.columns[x!='']]]
我尝试的是:

photo_df= df1.fillna('').filter(like='Photo')
product_df = df1.fillna('').filter(like='Description')

vals = [(i, y) for i, x in enumerate(photo_df.to_numpy())
          for y in vals[:3] + [['PH',z] 
          for z in photo_df.columns[x!='']]]
vals = [(i, y) for i, x in enumerate(product_df.to_numpy())
          for y in vals[:4] + [['Description',z] 
          for z in product_df.columns[x!='']]]
L = [df1.loc[df1.index[[i]], x].set_axis(range(len(x)), axis=1) for i, x in vals]

df  = pd.concat(L)
但这就给出了列表之外的列表

我又试了一次, 我将数据帧分为两部分:

photo_df= df1.fillna('').filter(like='Photo')
photo_df = photo_df.fillna('')
product_df = df1.fillna('').filter(like='Description')
product_df = product_df.fillna('')

vals = [(i, y) for i, x in enumerate(photo_df.to_numpy())
          for y in vals[:3] + [['PH',z] 
          for z in photo_df.columns[x!='']]]
vals2 = [(i, y) for i, x in enumerate(product_df.to_numpy())
          for y in vals[:0] + [['Description',z] 
          for z in product_df.columns[x!='']]]
L = [df1.loc[df1.index[[i]], x].set_axis(range(len(x)), axis=1) for i, x in vals]
M = [df2.loc[df2.index[[i]], x].set_axis(range(len(x)), axis=1) for i, x in vals2]

df  = pd.concat(L)
 
df3 = pd.concat(M)

df = pd.concat([df,df3])
输出:

 I             A
PH           A1.jpg
PH           A2.jpg
 I             B
PH           B1.jpg
PH           B2.jpg
PH           B3.jpg
PH           B4.jpg
 I             C
PH           C1.jpg
Description Nice
Description Beauiful
Description Ugly
Description Damaged
Description Cute
Description Handsome
Description Nice
 
如何以以下格式正确连接

预期的Dataframe与前面的问题类似,并添加了说明

预期产出:

I             A
PH           A1.jpg
PH           A2.jpg
Description Nice
Description Beauiful
I             B
PH           B1.jpg
PH           B2.jpg
PH           B3.jpg
PH           B4.jpg
Description Ugly
Description Damaged
I             C
PH           C1.jpg
Description Cute
Description Handsome
Description Nice

您已经拥有合并/连接的数据帧。这只是一个正确排序的问题吗

试试这个:

df['sort'] = [len(x) for x in df[0]]
df['Item'] = df.index

df.sort_values(by=['Item', 'sort'], inplace=True)
df.drop(labels=['Item', 'sort'], axis=1, inplace=True)
print(df.to_string(header=False, index=False)) 
它产生以下输出:

          I         A
         PH    A1.jpg
         PH    A2.jpg
Description      Nice
Description Beautiful
          I         B
         PH    B1.jpg
         PH    B2.jpg
         PH    B3.jpg
         PH    B4.jpg
Description      Ugly
Description   Damaged
          I         C
         PH    C1.jpg
Description      Cute
Description  Handsome
Description      Nice

您已经拥有合并/连接的数据帧。这只是一个正确排序的问题吗

试试这个:

df['sort'] = [len(x) for x in df[0]]
df['Item'] = df.index

df.sort_values(by=['Item', 'sort'], inplace=True)
df.drop(labels=['Item', 'sort'], axis=1, inplace=True)
print(df.to_string(header=False, index=False)) 
它产生以下输出:

          I         A
         PH    A1.jpg
         PH    A2.jpg
Description      Nice
Description Beautiful
          I         B
         PH    B1.jpg
         PH    B2.jpg
         PH    B3.jpg
         PH    B4.jpg
Description      Ugly
Description   Damaged
          I         C
         PH    C1.jpg
Description      Cute
Description  Handsome
Description      Nice
使用:

使用:


是的,添加了与以前相同的新Field的情况我无法运行无错误的代码,有VAL=['I','Item'],['Q','Quantity'],['P','Price']]?还添加了前一节中的一些代码我尝试测试您的解决方案,但失败,。我使用I I U U df=df.我使用I I I I U U U I I I I I I I I U U U U U U U U I I I I U U U F=df.我使用I I I I I I I U U U U U U U F=df=df.我使用I I I I I I I I I I I I I I I I I I I I U U U U U U U U I I I I I I I I I I I I I I I I I U U U U U U U U U U U F=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=I['I’,'I’,'I’,'I’,'I’,'I’,'I_df['Description']=I_df['Description'].fillna'Description'vals=[['I','Item'],['Q','Quantity'],['P','Price']],对于所讨论的数据是否正确?是的,数据集是正确的,输出与以前的问题相同是的,添加了与以前相同的大小写和新字段。我无法无误地运行代码,存在vals=['I','Item'],['Q','Quantity'],['P','Price']?还添加了上一节中的一些代码。我尝试测试您的解决方案,但失败,。我使用I I U U df=df.我使用I I I I U U U I I I I I I I I U U U U U U U U I I I I U U U F=df.我使用I I I I I I I U U U U U U U F=df=df.我使用I I I I I I I I I I I I I I I I I I I I U U U U U U U U I I I I I I I I I I I I I I I I I U U U U U U U U U U U F=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=df=I['I’,'I’,'I’,'I’,'I’,'I’,'I_df['Description']=I_df['Description'].fillna'Description'vals=['I','Item'],['Q','Quantity'],['P','Price']],对于所讨论的数据是否正确?是的,数据集是正确的,输出与前面的问题一样。您的答案正确,适用于小数据。但是,如果我有一个大的数据集,那么这将需要很多时间。我尝试了10000个数据,这大约需要15分钟。有什么办法可以减少执行时间吗?L=[df1.loc[df1.index[[i]],x]。在vals1中为i,x设置_axisrangelenx,axis=1],这条特殊的行需要大量的时间来执行大型操作data@AtomStore-我认为这里有可能按堆栈优化解决方案-第一个解决方案来自,因为在这个解决方案中,循环的优化是非常困难的,我们的答案是正确的,适用于小数据。但是,如果我有一个大的数据集,那么这将需要很多时间。我尝试了10000个数据,这大约需要15分钟。有什么办法可以减少执行时间吗?L=[df1.loc[df1.index[[i]],x]。在vals1中为i,x设置_axisrangelenx,axis=1],这条特殊的行需要大量的时间来执行大型操作data@AtomStore-我认为这里有可能按堆栈优化解决方案-来自的第一个解决方案,因为在这个解决方案中有循环,优化非常困难
photo_df= df1.fillna('').filter(like='Photo')
photo_df = photo_df.fillna('')
product_df = df1.fillna('').filter(like='Description')
product_df = product_df.fillna('')

#assigned to vals1 for avoid overwrite `vals`
vals1 = [(i, y) for i, x in enumerate(photo_df.to_numpy())
          for y in vals[:3] + [['PH',z] 
          for z in photo_df.columns[x!='']]]
#removed vals[:4] for avoid duplicated rows 
vals2 = [(i, y) for i, x in enumerate(product_df.to_numpy())
          for y in  [['Descr',z] 
          for z in product_df.columns[x!='']]]

L = [df1.loc[df1.index[[i]], x].set_axis(range(len(x)), axis=1) for i, x in vals1]
#selected df1
M = [df1.loc[df1.index[[i]], x].set_axis(range(len(x)), axis=1) for i, x in vals2]

df  = pd.concat(L)
df3 = pd.concat(M)
#sorting index by mergesort (only stable algo)
df = pd.concat([df,df3]).sort_index(kind='mergesort')
print (df)
             0          1
0            I          A
0           PH     A1.jpg
0           PH     A2.jpg
0  Description       Nice
0  Description  Beautiful
1            I          B
1           PH     B1.jpg
1           PH     B2.jpg
1           PH     B3.jpg
1           PH     B4.jpg
1  Description       Ugly
1  Description    Damaged
2            I          C
2           PH     C1.jpg
2  Description       Cute
2  Description   Handsome
2  Description       Nice