Python:访问数据框中的特定单元格,更改它,然后保存到数据框的新版本中

时间:2016-06-23 16:38:26

标签: python for-loop pandas

使用Pandas,我有一个数据框,其中包含一个字符串,我在分割时将其拆分;或者,被看到:

import re
re.split(';|,',x)

我想遍历整个数据框中的列,并使用新的分割创建当前数据框的副本。

这是我在这里尝试的其他答案。

for row in x:
    if pd.notnull(x):
        SplitIDs = re.split(';|,',x)
        df.iloc[0, df.columns.get_loc('x')] = SplitIDs

我不知道如何访问“for循环”当前正在查看的特定单元格,以便将其更改为拆分格式(对于数据框的新副本)。

如果我还可以获得有关如何将这些更改保存到数据框的新副本的说明,那就太棒了。

如果我的问题不明确,我道歉。我对脚本一般都很陌生 - 你的解释越详细越好。谢谢!

或者,如果我想在每次分割字符串时创建新列,该怎么办?例如,假设字符串现在被分成3个部分 - 而不是在同一个现有列下有3个字符串,我希望将2个新部分放入新的相邻列中。

如果我们使用这条路线,如果下一行(在同一列中)可以拆分为2(基于我们开始使用的相同参数),它将占用现有列的空间加上一列新列我们刚创建的(第三个是空白的)。或者,如果这行比我们刚制作的列多(并且所有部分都不合适),我如何继续制作适合这些部分的新列?

1 个答案:

答案 0 :(得分:0)

首先让我描述索引如何为pandas数据帧工作。假设你有以下daframe:

df = DataFrame(randn(5,2),index=range(0,10,2),columns=list('AB'))
In [12]: df
Out[12]:
    A           B
0   0.767612    0.322622
2   0.875476    2.819955
4   1.876320    -1.591170
6   0.645850    -0.492359
8   0.148593    0.721617

现在,例如,为了访问整行,您可以使用:

df.iloc[[2]]
    A           B   
4   1.876320    -1.591170

您可以在此处找到更多示例:Pandas Slicing and Indexing。现在,我想要一个新列,其中C位于A+B。我基本上可以做到以下几点:

df['C'] = df['A'] + df['B']

Out[23]: df
    A           B           C
0   0.767612    0.322622    1.090235
2   0.875476    2.819955    3.695431
4   1.876320    -1.591170   0.285151
6   0.645850    -0.492359   0.153490
8   0.148593    0.721617    0.870210

如您所见,您不需要逐个单元格访问数据,您可以同时将函数应用于整个列。现在,假设您的列所在的列称为myStrings,要根据将正则表达式应用于该列的结果创建新列,您可以执行以下操作:

df['new_string'] = df['myStrings'].str.replace(r'(\b\S)', r'+\1')

您可以在此处应用自己的正则表达式。有关.str功能的更多信息,您可以查看here。更具体地说明你想要的东西:

data = {'raw': ['Arizona 1',
                'Iowa 1',
                'Oregon 0']}
df = pd.DataFrame(data, columns = ['raw'])
df
Out[31]:
    raw
0   Arizona 1
1   Iowa 1
2   Oregon 0

你想根据空间拆分这个并将两个保存在两个新列(甚至是一个新的数据帧)中:

df['firstSplit'] = df['raw'].str.split(' ').str.get(0)

这将产生以下我相信你正在寻找的东西:

df
Out[30]:
    raw         firstSplit
0   Arizona 1   Arizona
1   Iowa 1      Iowa
2   Oregon 0    Oregon