Python:访问数据帧中的特定单元格,对其进行更改,然后保存到数据帧的新版本中
使用Pandas,我有一个数据框,其中的一列包含一个字符串,当;或者,可以看到: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 我不知道如何访
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”,作为具有各自值的标题。我该怎么做?最近的