Преобразуйте все строки с числами в целые числа в DataFrames - PullRequest
0 голосов
/ 03 августа 2020

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

Я хочу, чтобы все ячейки, содержащие только числа в выходном файле, сохранялись как числа . Поскольку столбцы с числами известны (от 5 до 8), я использовал следующий код для преобразования текста в числа с плавающей запятой:

for dictionary in list_of_Excelfiles
    dictionary[DataFrame][5:8].astype(float)

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

Какое условие может фильтровать ячейки только с числами и преобразовывать их в целые числа?

1 Ответ

1 голос
/ 03 августа 2020

Вы можете использовать try and except и apply map, вот полный пример:

создать случайные данные, например:

def s():
    return [''.join(random.choices([x for x in string.ascii_letters[:6]+string.digits], k=random.randint(1, 5))) for x in range(5)]
df = pd.DataFrame()
for c in range(4):
    df[c] = s()

определить try and except fun c :

def try_int(s):
    try:
        return int(s)
    except ValueError:
        return s

применить к каждой ячейке:

df2 = df.applymap(try_int)
...