Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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_For Loop_Pandas - Fatal编程技术网

Python:访问数据帧中的特定单元格,对其进行更改,然后保存到数据帧的新版本中

Python:访问数据帧中的特定单元格,对其进行更改,然后保存到数据帧的新版本中,python,for-loop,pandas,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 我不知道如何访

使用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行(基于我们开始使用的相同参数),那么它将占用现有列的空间加上我们刚刚创建的一个新列(第三行将为空)。或者,如果这一行的列数超过了我们刚才制作的列数(而所有的部分都无法容纳),那么我如何继续制作新的列来容纳这些部分呢?

首先让我描述一下pandas dataframe的索引工作原理。假设您具有以下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
您可以在此处找到更多示例:。现在假设我想要一个新的列,其中
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
df['new_string'] = df['myStrings'].str.replace(r'(\b\S)', r'+\1')
正如您所看到的,您不需要逐个单元格访问数据,您可以同时将函数应用于整个列。现在,假设字符串所在的列称为myStrings,要基于对其应用正则表达式的结果创建一个新列,可以执行以下操作:

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
df['new_string'] = df['myStrings'].str.replace(r'(\b\S)', r'+\1')
您可以在这里应用自己的正则表达式。有关
.str
函数的更多信息,请查看。要更具体地了解您想要什么:

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
Out[30]:
    raw         firstSplit
0   Arizona 1   Arizona
1   Iowa 1      Iowa
2   Oregon 0    Oregon

首先让我来描述熊猫数据帧的索引工作原理。假设您具有以下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
您可以在此处找到更多示例:。现在假设我想要一个新的列,其中
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
df['new_string'] = df['myStrings'].str.replace(r'(\b\S)', r'+\1')
正如您所看到的,您不需要逐个单元格访问数据,您可以同时将函数应用于整个列。现在,假设字符串所在的列称为myStrings,要基于对其应用正则表达式的结果创建一个新列,可以执行以下操作:

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
df['new_string'] = df['myStrings'].str.replace(r'(\b\S)', r'+\1')
您可以在这里应用自己的正则表达式。有关
.str
函数的更多信息,请查看。要更具体地了解您想要什么:

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
Out[30]:
    raw         firstSplit
0   Arizona 1   Arizona
1   Iowa 1      Iowa
2   Oregon 0    Oregon

column\u name.str.split(',',expand=True)
这不仅会在所选列下拆分我的字符串,而且还会通过在拆分后添加(“展开”)更多列来加宽数据框,以便每个拆分的字符串都有自己的列。感谢“拆分和替换字符串”@EricCoy True,但您仍然可以像我在示例中所做的那样从中得到您想要的东西。我编辑了我的答案,查看最后一个示例。如果您使用
get(1)
而不是
get(0)
,它将为您提供第二个元素,依此类推……如果数据框具有现有的附加标题,我将如何将更改应用到我们所做的数据框,以便我可以进一步操作它?例如,假设在带有“raw”头的示例中,有现有的头,“1”、“2”、“3”(每个头都有自己的数据)——让我们称之为df1,其中包含“raw”、“1”、“2”、“3”头。然后,在解析“raw”之后,我们现在有了“raw”和“first split”,但我想将其保存到一个包含所有头的新数据帧中。因此,df2应该是“raw”、“firstsplit”、“1”、“2”、“3”,作为具有各自值的标题。如何做到这一点?我能得到的最接近的结果是
df2=pd.concat([df1,firstSplit],axis=1)
但这会将firstSplit放在末尾,而不是替换它在df1中存在的位置。
column\u name.str.split(',',expand=True)
这不仅会在所选列下拆分我的字符串,还会通过添加(“expand”)来加宽数据框拆分后有更多列,因此每个拆分的字符串都有自己的列。感谢“拆分和替换字符串”@EricCoy True,但您仍然可以像我在示例中所做的那样从中得到您想要的东西。我编辑了我的答案,查看最后一个示例。如果您使用
get(1)
而不是
get(0)
,它将为您提供第二个元素,依此类推……如果数据框具有现有的附加标题,我将如何将更改应用到我们所做的数据框,以便我可以进一步操作它?例如,假设在带有“raw”头的示例中,有现有的头,“1”、“2”、“3”(每个头都有自己的数据)——让我们称之为df1,其中包含“raw”、“1”、“2”、“3”头。然后,在解析“raw”之后,我们现在有了“raw”和“first split”,但我想将其保存到一个包含所有头的新数据帧中。因此,df2应该是“raw”、“firstsplit”、“1”、“2”、“3”,作为具有各自值的标题。我该怎么做?最近的