<p>一个简单易懂、调试和灵活扩展的解决方案如下:</p>
<p>考虑一下您的初始产品名保存在一个名为<code>strings</code>的列表中。在</p>
<p>然后,<strong>解决方案如下</strong>:</p>
<pre><code>mydf = pd.concat([pd.DataFrame([make_row(row, 4)], columns=['COL1', 'COL2', 'COL3', 'COL4']) for row in strings], ignore_index=True)
</code></pre>
<p>其中,我们将解析函数<code>make_row</code>定义为:</p>
^{pr2}$
<p>定义<code>cols</code>的第一行也可以是简单的<code>cols = string.split('-')</code>,在这种情况下,您可以使用以下命令进行格式化:</p>
<pre><code>mydf.applymap(lambda x: x if pd.isnull(x) else str.strip(x))
</code></pre>
<p>现在在您的例子中,我看到您的一些产品名称中有一个连字符,在这种情况下,您可能需要提前对它们进行“清理”(或者在<code>make_row</code>内,如您所愿),使用类似于:</p>
<pre><code>strings = [item.replace('t-shirt', 'tshirt') for item in strings]
</code></pre>
<p><strong>示例输入</strong>:</p>
<pre><code>strings = ['1.one-two-three', '2. one-two', '3.one-two-three-four', '4.one - two -three -four ']
</code></pre>
<p><strong>输出</strong>:</p>
<pre><code> COL1 COL2 COL3 COL4
0 one two three NaN
1 one two NaN NaN
2 one two three four
3 one two three four
</code></pre>
<p><strong>问题数据的输出</strong>(在更正第4项的错误之后):</p>
<pre><code> COL1 COL2 COL3 COL4
0 star tshirt large red NaN
1 star tshirt large blue NaN
2 star tshirt small red NaN
3 beautiful rainbow skirt small NaN NaN
4 long maxwell logan jeans light blue 32L 28W
5 long maxwell logan jeans Dark blue 32L 28W
</code></pre>
<p><strong>编辑:</strong></p>
<p>如果您还想将项目“分组”,则可以:</p>
<p>a)在获得如上所述的数据帧之后,在列COL1上使用<code>sort_values</code>(<a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html" rel="nofollow noreferrer">pandas doc</a>),以简单地逐个显示同一产品对应的行,或者</p>
<p>b)使用<code>group_by</code>来实际获得如下分组的数据帧:</p>
<pre><code>grouped_df = mydf.groupby("COL1")
</code></pre>
<p>这样可以让每个组都这样:</p>
<pre><code>grouped_df.get_group("star tshirt")
</code></pre>
<p>产生以下输出:</p>
<pre><code> COL1 COL2 COL3 COL4
0 star tshirt large red NaN
1 star tshirt large blue NaN
2 star tshirt small red NaN
</code></pre>