我想将一个单元格中的字符串拆分到它下面的新行中。
现在,我使用了一个带有if语句的while循环,并迭代了第一列。如果它包含我要查找的字符串,我会使用另一个while循环将一个空行附加到dataframe的末尾,然后将每一行向下复制一行,直到在包含该字符串的那一行之后有一个空行。然后,我将字符串复制到空行中。这感觉是做这件事最复杂的方式。
我研究了explode()函数,看起来它应该能起作用,但我不能让它工作。
基本上,每当它遇到像"bla bla (ASTM xxxx)“这样的东西时,我想拆分出"ASTM xxxx”。在我将新行的第0列设为"Method“之后,后面的每一列都是"ASTM xxxx”。
当前工作代码:
var_row = 0
var_row_length = len(df.index)-1
var_countdown = len(df.index)
while var_row < var_row_length:
if "ASTM" in str(df.iloc[var_row,0]):
df = df.append(pd.Series(name=var_countdown))
while var_countdown > var_row:
df.loc[var_countdown] = df.loc[var_countdown-1]
var_countdown -= 1
df.loc[var_countdown+1]=np.nan
#copy df.iloc[var_countdown,0] to [var_countdown+1,0], copy over to [var_countdown+1,1], keep ASTM xxxx only
#ffill the rest of the empty row, profit
df.loc[var_countdown+1,2]=df.loc[var_countdown,0]
df.loc[var_countdown+1,2] = re.sub('.*ASTM','ASTM',df.loc[var_countdown+1,2])
df.iloc[var_countdown+1,2]=df.iloc[var_countdown+1,2].replace('):','')
df.iloc[var_countdown+1,2:] = df.iloc[var_countdown+1,2:].fillna(method='ffill')
df.iloc[var_countdown,0]=df.iloc[var_countdown,0].split('(')[0]
df.iloc[var_countdown+1,1]="Method"
var_countdown = len(df.index)
var_row += 1我可以使用下面的代码找到这些值:
df[df[0].str.contains("ASTM", na=False)]但我不知道如何将“ASTM”字符串拆分到它下面的另一行中。
当我使用explode()时,什么也没有发生。我甚至不知道我能不能用一根选定的线把它炸开。也许可以一起使用split()和explode()?
发布于 2019-08-26 19:38:48
我想你是在找这样的东西,
mask = df[0].str.contains("ASTM", na=False)
df.loc[mask, 6] = df[0]使用df.str.contains("ASTM",na=False)获取掩码,创建仅存储掩码值的新列
https://stackoverflow.com/questions/57657090
复制相似问题