#python #pandas
#python #pandas
Вопрос:
знаете ли вы, как преобразовать этот код, чтобы получить более быстрый? В этом коде я хотел бы взять только число (десятичное или целое число) и отклонить слова, присутствующие в столбце. на самом деле, в столбце a я могу найти как число, так и слова. Спасибо!
a=['a', '9','4.5','nnn', '3.4543', '2'] c=[1,10,5,4,4,7]
df=pd.DataFrame(a,c)
b =pd.Series(np.zeros(len(df)), name='b', index=df.index)
i = 0
for row in df.a:
if re.findall(r'(d [.]d )', str(row)):
b.loc[i] = re.search(r'(d [.]d )', str(row)).group()
elif re.findall(r'(bd b)', str(row)):
b.loc[i] = re.search(r'(bd b)', str(row)).group()
else:
b.loc[i] = '9999'
i = i 1
for i in range(len(b)):
b.loc[i]=float(b.loc[i])
df.a = b
Я хотел бы получить=[9999, 9, 4.5,9999,3.4543, 2]
Комментарии:
1. если вы покажете образец своих данных с предполагаемым выводом, мы можем помочь с решением.
2. вот так: a= [‘a’, ‘9’,’4.5′,’ ннн’, ‘3.4543’, ‘2’] c=[1,10,5,4,4,7] df=pd.DataFrame(a,c) Я хотел бы получить a=[9999, 9, 4.5,9999,3.4543, 2]
3. пожалуйста, добавьте его в свой основной пост
Ответ №1:
Используйте функции apply и assign для создания нового столбца:
импорт re
regnumber = re.compile(r'd (?:,d*)?')
a=['a', '9','4.5','nnn', '3.4543', '2']
c=[1,10,5,4,4,7]
df=pd.DataFrame({'a':a,'c':c})
df = df.assign(
a = lambda x: x['a'].apply(lambda s: s if regnumber.match(s) else 9999)
)
print(df)
a c
9999 1
9 10
4.5 5
9999 4
3.4543 4
2 7