将特定单元格中的字符串移动到另一个单元格中

2024-05-19 08:57:36 发布

您现在位置:Python中文网/ 问答频道 /正文

鉴于以下情况:

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)

如何使用索引[2,1]中的值将其放置在索引[2,2]中?在使用它之后,我想将它从[2,1]中删除。 enter image description here


Tags: my情况nandictmunicipiorojobarranquitasbayam
2条回答

您好,您可以使用iloc移动单元格
enter image description here

这是您当前的数据帧。我们想移动[2,1]将其放入索引[2,2]。为此,只需使用iloc为[2,2]指定[2,1]处的值,然后将其删除,只需将[2,1]处的值替换为nan即可

my_df.iloc[2,2] = my_df.iloc[2,1]
my_df.iloc[2,1] = np.nan

运行上述命令后,您将获得以下数据帧:- enter image description here

这里有一个暴力解决方案。您可以使用iloc和字符串位置来完成赋值

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)

输出:

        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

但是,如果只想交换两个单元格的值,可以执行以下操作:

my_df.iloc[2,1], my_df.iloc[2,2]  = my_df.iloc[2,2], my_df.iloc[2,1]

解决办法是:

        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

由于要将带有'* letters'的字符串从[2,1]提取到[2,2],并将值的剩余部分保留在[2,1]中,因此可以使用正则表达式提取值

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)

输出结果如下:

        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

注意,我们不能使用iloc[].str,因为我们只处理一个单元格。如果是一组行,那么我们可以使用iloc[].str

通过将拆分指定为n个数字,我们可以确保所有值都存储到列中

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]

上面的条件为.iloc[],0时,我们确保它搜索并仅提供第一项。与iloc[]类似,1将我们分成两部分,并选择第二项(索引从0开始,因此1是第二个元素)。下面,我修改了[2,1],使其具有多个*+空格+字母+空格+数字模式。但是,我仍然得到了只提取列[2,2]的第一个*+空格+字母的预期结果

        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

相关问题 更多 >

    热门问题