2014-12-26 3 views
0

У меня есть dataframe, который имеет один столбец с данными, выглядит следующим образом:DataFrame Строка Манипуляция

AAH. 
AAH. 
AAR.UN 
AAR.UN 
AAR.UN 
AAR.UN 
AAV. 
AAV. 
AAV. 

Я думаю, что мне нужно использовать метод применить для обрезки данных столбцов. Поэтому, если после периода сохраняется что-либо, сохраните данные без изменений, но если после периода нет ничего, верните только буквы без периода в конце. Я знаю, что, возможно, я могу использовать функцию лямбда, а может быть, раскол строки или что-то в этом роде, но у меня мало идеи, чтобы это произошло.

Это вроде того, что я до сих пор:

df.apply(lambda x: string.split('.')) 

Я не уверен, если я могу использовать, если заявление или что-то с лямбда-функции таким образом?

Любое руководство оценено.

+0

что вы хотите получить в итоге? split возвращает список, это то, что вы хотите? – tinySandy

+0

Нет, я действительно хочу просто получить значение строки так, чтобы быть AAV или AAR.UN, я предполагаю, что я пытаюсь векторизовать весь столбец одним выстрелом kinda – Tom

ответ

2

Поскольку есть только один столбец, вы можете воспользоваться векторизованными строковыми операциями через .str (docs):

>>> df 
     0 
0 AAH. 
1 AAH. 
2 AAR.UN 
3 AAR.UN 
4 AAR.UN 
5 AAR.UN 
6 AAV. 
7 AAV. 
8 AAV. 
>>> df[0] = df[0].str.rstrip('.') 
>>> df 
     0 
0  AAH 
1  AAH 
2 AAR.UN 
3 AAR.UN 
4 AAR.UN 
5 AAR.UN 
6  AAV 
7  AAV 
8  AAV 

В противном случае вы должны сделать что-то вроде df.applymap(lambda x: x.rstrip(".")), или падения вниз Numpy char методы.

+0

Фактически у меня есть 3 столбца, но будет ли это работать одинаково если я укажу, какой col я хочу, чтобы это работало? – Tom

+0

@tbonejo: yep, нет ничего особенного в '0', и вы могли бы перебирать' df.columns', если хотите. Если вы знаете, что все строки (без пропущенных значений), то также подходит метод «applymap». – DSM

+0

Не знаю, почему, но я не могу заставить это работать, поскольку это просто ошибки, что он не мог найти ключ. Одна вещь, о которой я не упоминал, это получить df из функции xls.parse. – Tom

0

Вы также можете использовать функцию лямбда, чтобы сделать это:

>>> L = [['AAH.'], 
     ['AAR.UN'], 
     ['AAR.UN'], 
     ['AAV.'], 
     ['AAV.']] 

>>> df = pd.DataFrame(L) 
>>> M = lambda x: x[0][:-1] if x[0][-1]=='.' else x[0][:] 
>>> df = df.apply(M, axis=1) 

>>> df 
0  AAH 
1 AAR.UN 
2 AAR.UN 
3  AAV 
4  AAV