#python #python-3.x #dataframe
#python #python-3.x #фрейм данных
Вопрос:
Я пытаюсь преобразовать счет AGL в dataframe, чтобы я мог поместить необходимые значения в электронную таблицу Excel.
Я застрял, пытаясь .replace()
заменить символы в строках ничем, чтобы остались только цифры (пытаясь удалить все слова в фрейме данных). Другая проблема заключается в том, что в каждой ячейке содержится несколько слов и чисел.
from tabula import read_pdf
import openpyxl
from openpyxl import load_workbook
import pandas as pd
import numpy as np
df1 = tabula.read_pdf('C:/Users/Blake/Desktop/Python/AGL_Bill.pdf',guess=False, pages=2)
df1.columns = ['Description', 'Blank', 'Values']
df1.drop(labels=None, axis=None, index=[0,1,3,4,7,8,25,26,19,15,16,20,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62], columns=None, level=None, inplace=True, errors='raise')
df1.drop(labels=None, axis=1, columns=['Values'], level=None, inplace=True, errors='raise')
df1['Description'].str.replace('kWh', '')
print (df1)
df1.to_csv('Tableone.csv', encoding='utf-8')
wb2 = load_workbook('C:/Users/Blake/Desktop/ETemplate.xlsx')
wb2.create_sheet('DATA')
wb2.save('C:/Users/Blake/Desktop/Template.xlsx')`
Ответ №1:
Если вы пытаетесь заменить символы ничем — тогда регулярное выражение с использованием чисел, каждая ячейка — объединение их вместе.
импортировать повторно
import pandas as pd
data={'1':'Some dumb data $200.22 for me','2':'Some more really dumb data $5.23'}
df=pd.DataFrame.from_dict(data,orient='index')
df.columns=['Data']
def Num_Only(val):
return ' '.join(re.findall('[d.] ',val))
df['New']=''
df.New=df.Data.apply(lambda x: Num_Only(x))
Which should output a new Dataframe ... like this
Вывод сейчас… Я удалил $, поскольку он не служит никакой цели.
1. Some dumb data $200.22 for me 200.22
2 Some more really dumb data $5.23 5.23
Надеюсь, это поможет вам
Комментарии:
1. Я только что попробовал это, и я получаю: AttributeError: объект ‘DataFrame’ не имеет атрибута ‘Data’
2. «Данные» — это имя столбца в моем тестовом фрейме данных. Ваши столбцы ‘Description’ и ‘Blank’ …. Чтобы установить их, сделайте что-то вроде df.columns=[‘ColName1′,’ColName2’]
3. Спасибо, это сработало, но теперь там написано: TypeError: ожидаемый объект, подобный строке или байтам
4. Функция Num_Only нуждается в некоторой обработке ошибок и проверке в ней. Таким образом, он может обрабатывать ячейки без (или, возможно, повторяющихся групп)….. Поскольку я спешил, я не добавил это…. Боюсь, что домашнее задание для вас 🙂
5. Спасибо, Тим!! У меня это получилось, просто пришлось изменить столбцы на str перед передачей в Num_only.