Я хочу разделить строку из ячейки на новую строку чуть ниже нее.
Сейчас я использую цикл while с оператором if и перебираю первый столбец. Если он содержит строку, которую я ищу, я использую другой цикл while, чтобы добавить пустую строку в конец фрейма данных, а затем копировать каждую строку вниз на одну строку, пока у меня не будет пустая строка после строки, содержащей строку. Затем я копирую строку в эту пустую строку. Это кажется наиболее запутанным способом сделать это.
Я изучил функцию explode () и, похоже, она должна помочь, но я не могу заставить ее работать.
Обычно всякий раз, когда встречается что-то вроде «bla bla (ASTM xxxx)», я хочу выделить «ASTM xxxx». После того, как я сделаю столбец 0 этой новой строки «Методом», а каждый последующий столбец будет «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 () вместе?