Преобразование Excel в формат пера с помощью python - PullRequest
2 голосов
/ 06 мая 2020

У меня есть (ежедневно растущий) список из примерно 100 больших файлов Excel, которые я анализирую в Python. Поскольку мне приходится запускать несколько циклов по всем файлам, мой анализ становится все медленнее и медленнее. Поэтому я хотел бы конвертировать все файлы Excel в формат пера (например, раз в неделю). Есть ли умный способ сделать это? То, что я пробовал до сих пор:

path = r"filepath\*_name*.xlsx"
file_list = glob.glob(path)
for f in file_list:
    df = pd.read_excel(f, encoding='utf-8')
    df[['boola', 'boolb']] = dfa[['boola', 'boolb']].astype(int)
    pathname = f[:-5] + ".ftr"
    df.to_feather(pathname)

Но я получаю следующее сообщение об ошибке:

ArrowInvalid: ('Could not convert stringa with type str: tried to convert to boolean', "Conversion failed for column stringb with type object")

1 Ответ

0 голосов
/ 08 мая 2020

Вот что решило мою проблему:

path = r"pathname\*_somename*.xlsx"
file_list = glob.glob(path)
for f in file_list:
    df = pd.read_excel(f, encoding='utf-8', decimal=',', thousands='.')
    for col in df.columns:
            w= (df[[col]].applymap(type) != df[[col]].iloc[0].apply(type)).any(axis=1)
            if len(df[w]) > 0:

                df[col] = df[col].astype(str)

            if df[col].dtype == list:
                df[col] = df[col].astype(str)
    pathname = f[:-4] + "ftr"
    df.to_feather(pathname)
df.head()

часть , decimal=',', thousands='.' была необходима, потому что мой входной файл был отформатирован по европейскому стандарту, то есть с использованием запятой в качестве десятичного разделителя и точки в качестве разделителя тысяч

...