sourcetip

Python df.to _messages는 숫자를 excel의 텍스트로 저장할 수 없습니다.가치로 저장하는 방법?

fileupload 2023. 7. 7. 21:01
반응형

Python df.to _messages는 숫자를 excel의 텍스트로 저장할 수 없습니다.가치로 저장하는 방법?

나는 pd.read_html을 통해 구글 파이낸스에서 테이블 데이터를 스크랩한 다음 그 데이터를 저장하여 탁월하게 처리하고 있습니다.df.to_excel()아래와 같이:

    dfs = pd.read_html('https://www.google.com/finance?q=NASDAQ%3AGOOGL&fstype=ii&ei=9YBMWIiaLo29e83Rr9AM', flavor='html5lib')
    xlWriter = pd.ExcelWriter(output.xlsx, engine='xlsxwriter')

    for i, df in enumerate(dfs):
        df.to_excel(xlWriter, sheet_name='Sheet{}'.format(i))
    xlWriter.save()

그러나 excel로 저장된 숫자는 셀 모서리에 작은 녹색 삼각형이 있는 텍스트로 저장됩니다.이 데이터를 Excel로 이동할 때 텍스트가 아닌 실제 값으로 저장하려면 어떻게 해야 합니까?

데이터 프레임을 생성하거나 사용할 때 문자열 데이터가 숫자로 변환되는 다른 솔루션 외에도 다음과 같은 옵션을 사용하여 수행할 수 있습니다.xlsxwriter엔진:

# Versions of Pandas >= 1.3.0:
writer = pd.ExcelWriter('output.xlsx',
                        engine='xlsxwriter',
                        engine_kwargs={'options': {'strings_to_numbers': True}})

# Versions of Pandas < 1.3.0:
writer = pd.ExcelWriter('output.xlsx',
                        engine='xlsxwriter',
                        options={'strings_to_numbers': True})

문서에서:

strings_to_numbers사용 가능worksheet.write()문자열을 숫자로 변환하는 방법(가능한 경우), 사용float()텍스트로 저장된 숫자에 대한 Excel 경고를 피하기 위해.

숫자 열을 부동 소수점으로 변환하는 것을 고려해 보십시오.pd.read_html웹 데이터를 문자열 형식(즉, 개체)으로 읽습니다.그러나 플로트로 변환하기 전에 하이픈을 NaNs로 바꿔야 합니다.

import pandas as pd
import numpy as np

dfs = pd.read_html('https://www.google.com/finance?q=NASDAQ%3AGOOGL' +
                   '&fstype=ii&ei=9YBMWIiaLo29e83Rr9AM', flavor='html5lib')
xlWriter = pd.ExcelWriter('Output.xlsx', engine='xlsxwriter')
workbook = xlWriter.book

for i, df in enumerate(dfs):
    for col in df.columns[1:]:                  # UPDATE ONLY NUMERIC COLS 
        df.loc[df[col] == '-', col] = np.nan    # REPLACE HYPHEN WITH NaNs
        df[col] = df[col].astype(float)         # CONVERT TO FLOAT   

    df.to_excel(xlWriter, sheet_name='Sheet{}'.format(i))

xlWriter.save()

이는 경고가 표시되는 열의 데이터 유형이 다음과 같기 때문일 수 있습니다.objects다음과 같은 숫자 유형이 아닙니다.int또는float.

데이터 프레임의 각 열의 데이터 유형을 확인하려면 다음과 같이 사용합니다.

print(df.dtypes)

제 경우, 숫자 값 대신 객체로 저장된 열은PRECO_ES

DF dtypes

저의 특별한 경우, 십진수가 관련이 있기 때문에, 저는 , 를 사용하여 다음과 같이 float로 변환했습니다.

df['PRECO_ES'] = df['PRECO_ES'].astype(float)

데이터 유형을 다시 확인하면 다음과 같은 정보를 얻을 수 있습니다.

DF column changed to float

그런 다음 데이터 프레임을 Excel로 내보내기만 하면 됩니다.

#Export the DataFRame (df) to XLS
xlsFile = "Preco20102019.xls"
df.to_excel(xlsFile)

#Export the DataFRame (df) to CSV
csvFile = "Preco20102019.csv"
df.to_csv(csvFile)

그런 다음 Excel 파일을 열면 텍스트가 아닌 숫자로 값이 저장되므로 경고가 더 이상 표시되지 않음을 알 수 있습니다.

Excel file without the warning

내보낼 열이 실제로 파이썬(int 또는 float)의 숫자인지 확인했습니까?

또는 = VALUE() 기능을 사용하여 텍스트 필드를 Excel의 숫자로 변환할 수 있습니다.

panda 0.19부터 pd.read_html에 na_values 인수를 제공하면 pd.read_html을 사용하여 가격 열에 부동액 유형을 자동으로 정확하게 추론할 수 있습니다.

다음과 같이 표시됩니다.

dfs = pd.read_html(
    'https://www.google.com/finance?q=NASDAQ%3AGOOGL&fstype=ii&ei=9YBMWIiaLo29e83Rr9AM',
    flavor='html5lib',
    index_col='\nIn Millions of USD (except for per share items)\n',
    na_values='-'
)

xlWriter = pd.ExcelWriter('Output.xlsx', engine='xlsxwriter')
for i, df in enumerate(dfs):
    df.to_excel(xlWriter, sheet_name='Sheet{}'.format(i))
xlWriter.save()

또는 (팬더 0.19가 아직 없다면) @Parfait 솔루션의 간단한 버전을 사용합니다.

dfs = pd.read_html(
    'https://www.google.com/finance?q=NASDAQ%3AGOOGL&fstype=ii&ei=9YBMWIiaLo29e83Rr9AM',
    flavor='html5lib',
    index_col='\nIn Millions of USD (except for per share items)\n'
)

xlWriter = pd.ExcelWriter('Output.xlsx', engine='xlsxwriter')
for i, df in enumerate(dfs):
    df.mask(df == '-').astype(float).to_excel(xlWriter, sheet_name='Sheet{}'.format(i))
xlWriter.save()

이 두 번째 솔루션은 인덱스 열(.read_html)을 올바르게 정의한 경우에만 작동하며, (데이터) 열 중 하나에 플로트로 변환할 수 없는 항목이 포함되어 있으면 ValueError와 함께 비참하게 실패합니다.

Excel 시트에 문자열 데이터 유형을 지정하려면 다음과 같이 하십시오.

for col in original_columns:
    df_employees[col] = df_employees[col].astype(pd.StringDtype())

언급URL : https://stackoverflow.com/questions/41080999/python-df-to-excel-storing-numbers-as-text-in-excel-how-to-store-as-value

반응형