<p>这里有一个暴力解决方案。您可以使用iloc和字符串位置来完成赋值</p>
<pre><code>import pandas as pd
my_dict = {'Municipio': {0: '* Barranquitas', 1: '* Bayamón', 2: '* Cabo Rojo', 3: '* Caguas', 4: '* Camuy'},
'Frecuencia %': {0: '656 0.8', 1: '6307 8.0', 2: '* Orocovis 397 0.5', 3: '0.2 3726 4.7', 4: '0.4 745 0.9'},
'Municipio 2': {0: '* Naguabo', 1: '* Naranjito', 2: 'nan', 3: '* Patillas', 4: '* Peñuelas'}}
my_df = pd.DataFrame(my_dict)
my_df.iloc[2,2] = my_df.iloc[2,1][:10]
my_df.iloc[2,1] = my_df.iloc[2,1][10:]
print (my_df)
</code></pre>
<p>输出:</p>
<pre><code> Municipio Frecuencia % Municipio 2
0 * Barranquitas 656 0.8 * Naguabo
1 * Bayamón 6307 8.0 * Naranjito
2 * Cabo Rojo 397 0.5 * Orocovis
3 * Caguas 0.2 3726 4.7 * Patillas
4 * Camuy 0.4 745 0.9 * Peñuelas
</code></pre>
<p>但是,如果只想交换两个单元格的值,可以执行以下操作:</p>
<pre><code>my_df.iloc[2,1], my_df.iloc[2,2] = my_df.iloc[2,2], my_df.iloc[2,1]
</code></pre>
<p>解决办法是:</p>
<pre><code> Municipio Frecuencia % Municipio 2
0 * Barranquitas 656 0.8 * Naguabo
1 * Bayamón 6307 8.0 * Naranjito
2 * Cabo Rojo nan * Orocovis 397 0.5
3 * Caguas 0.2 3726 4.7 * Patillas
4 * Camuy 0.4 745 0.9 * Peñuelas
</code></pre>
<p>由于要将带有<code>'* letters'</code>的字符串从[2,1]提取到[2,2],并将值的剩余部分保留在[2,1]中,因此可以使用正则表达式提取值</p>
<pre><code>import pandas as pd
import re
my_dict = {'Municipio': {0: '* Barranquitas', 1: '* Bayamón', 2: '* Cabo Rojo', 3: '* Caguas', 4: '* Camuy'},
'Frecuencia %': {0: '656 0.8', 1: '6307 8.0', 2: '* Orocovis 397 0.5', 3: '0.2 3726 4.7', 4: '0.4 745 0.9'},
'Municipio 2': {0: '* Naguabo', 1: '* Naranjito', 2: 'nan', 3: '* Patillas', 4: '* Peñuelas'}}
my_df = pd.DataFrame(my_dict)
print (my_df)
my_df.iloc[2,2] = re.search('\* \w+',my_df.iloc[2,1],0)[0] #first value will be the required text string
my_df.iloc[2,1] = re.split('\* \w+ ',my_df.iloc[2,1],1)[1] #the second part is the numbers
print (my_df)
</code></pre>
<p>输出结果如下:</p>
<pre><code> Municipio Frecuencia % Municipio 2
0 * Barranquitas 656 0.8 * Naguabo
1 * Bayamón 6307 8.0 * Naranjito
2 * Cabo Rojo * Orocovis 397 0.5 nan
3 * Caguas 0.2 3726 4.7 * Patillas
4 * Camuy 0.4 745 0.9 * Peñuelas
Municipio Frecuencia % Municipio 2
0 * Barranquitas 656 0.8 * Naguabo
1 * Bayamón 6307 8.0 * Naranjito
2 * Cabo Rojo 397 0.5 * Orocovis
3 * Caguas 0.2 3726 4.7 * Patillas
4 * Camuy 0.4 745 0.9 * Peñuelas
</code></pre>
<p>注意,我们不能使用iloc[].str,因为我们只处理一个单元格。如果是一组行,那么我们可以使用iloc[].str</p>
<p>通过将拆分指定为n个数字,我们可以确保所有值都存储到列中</p>
<pre><code>my_df.iloc[2,2] = re.search('\* \w+',my_df.iloc[2,1],0)[0]
my_df.iloc[2,1] = re.split('\* \w+ ',my_df.iloc[2,1],1)[1]
</code></pre>
<p>上面的条件为.iloc[],0时,我们确保它搜索并仅提供第一项。与iloc[]类似,1将我们分成两部分,并选择第二项(索引从0开始,因此1是第二个元素)。下面,我修改了[2,1],使其具有多个*+空格+字母+空格+数字模式。但是,我仍然得到了只提取列[2,2]的第一个*+空格+字母的预期结果</p>
<pre><code> Municipio Frecuencia % Municipio 2
0 * Barranquitas 656 0.8 * Naguabo
1 * Bayamón 6307 8.0 * Naranjito
2 * Cabo Rojo * Orocovis 397 * and 0.5 nan
3 * Caguas 0.2 3726 4.7 * Patillas
4 * Camuy 0.4 745 0.9 * Peñuelas
Municipio Frecuencia % Municipio 2
0 * Barranquitas 656 0.8 * Naguabo
1 * Bayamón 6307 8.0 * Naranjito
2 * Cabo Rojo 397 * and 0.5 * Orocovis
3 * Caguas 0.2 3726 4.7 * Patillas
4 * Camuy 0.4 745 0.9 * Peñuelas
</code></pre>