12 svar
203 visningar
tomast80 4213
Postad: 11 aug 2023 12:34

Problem med å, ä och ö

Hej!

När jag försöker exportera en dataframe som har variabler som innehåller svenska specialtecken såsom å, ä och ö ser det konstigt ut när jag sedan öppnar upp csv-filen.

Hur kommer man runt detta? Jag har letat en del på nätet, men inte fått till det.

Jag använder följande kommando för att exportera till csv-fil (df är min dataframe):

df.dropna().to_csv(loc_file,index=False)

Laguna 28611
Postad: 11 aug 2023 14:52

Jag brukar kunna lösa sånt, men jag känner inte till dataframe-modulen. Har du ett fullständigt litet program?

Vilken version av Python? 2 eller 3?

Hondel 1294
Postad: 12 aug 2023 08:05

Hm, är det hur du sparar den, eller hur du öppnar den efter att du sparat den? Dvs, är det pandas som strular till det, eller är det programmet du använder för att läsa filen? 

Ruben 71
Postad: 12 aug 2023 10:01

to_csv() har  ett 'encoding'-argument som bestämmer vilken encoding som används när filen sparas. Default är utf-8. Så länge du ser till att också läsa in filen som utf-8 borde det inte vara nåt problem. Om du ser problem i filen när du öppnar den i en texteditor betyder det inte att det blir problem om du läser in den i kod med rätt encoding. Vet iofs inte vad du vill göra med filen.

tomast80 4213
Postad: 12 aug 2023 11:46

Hej!

Tack för alla svar. Jag kör Python 3.6. Har skrivit om programmet nu så det bara innehåller de centrala delarna. Grunden är att jag har en excelfil som ser ut enligt nedan:

Jag läser in denna och gör några enkla manipulationer, se koden nedan:

import pandas as pd
from datetime import datetime

run_date = datetime.strptime('20230812', '%Y%m%d')
loc_data = r'C:\Temp\Data.xlsx'

data=pd.read_excel(loc_data)

N = data.shape[0]
M = 0

loc_output = r'C:\Temp\output.csv'

output=pd.DataFrame(columns=["Radnr","Namn","Ort","Ålder"])

for i in range(M,N):
    birth_date = data.loc[i,"Födelsedatum"]

    age = run_date.year - birth_date.year + (run_date.month - birth_date.month) /12.0 + (run_date.day - birth_date.day) / 360.0

    
    output.loc[i,'Radnr']=i
    output.loc[i,'Namn']=data.loc[i,'Namn']
    output.loc[i,'Ort']=data.loc[i,'Ort']
    output.loc[i,'Ålder']=age
   

# Write the data frames to CSV files
output.dropna().to_csv(loc_output,index=False)

I outputen (csv-fil) så blir det dock konstiga tecken istället för å, ä och ö (se nedan):

tomast80 4213
Postad: 12 aug 2023 11:49

Tillägg: datat output ser bra ut i Python (se nedan). Det är när man skriver till en csv-fil som något går snett.

tomast80 4213
Postad: 12 aug 2023 11:55

Tillägg2: jag öppnar csv-filen efteråt (output) i excel.

Hondel 1294
Postad: 12 aug 2023 11:58

Och om du skriver till fil, och direkt läser in den igen i en ny dataframe (utan att ha öppnat den i typ excel) ser det konstigt ut då i python? Jag misstänker också att det är något med encoding som gör att det ser konstigt ut i excel

tomast80 4213
Postad: 12 aug 2023 12:05

Hej Hondel!

Bra poäng, när jag läste in csv-filen igen i Python (i data2) så såg den bra ut:

data2=pd.read_csv(loc_output)

Det är alltså något i excel som strular när man försöker öppna filen där.

Har inte haft samma problem när jag öppnat csv-filer med å, ä och ö som skapats av R. Men Python kanske fungerar annorlunda?

tomast80 4213
Postad: 12 aug 2023 12:14

Det ska finnas någon workaround för problemet med excel genom att man lägger till några tecken i början av filen (BOM). Kan någon möjligen förklara hur jag skulle kunna få in det i mitt program, jag förstår inte riktigt?

https://stackoverflow.com/questions/5202648/adding-bom-unicode-signature-while-saving-file-in-python

Hondel 1294
Postad: 12 aug 2023 12:17 Redigerad: 12 aug 2023 12:18

Jag står kvar vid att det är encoding som är fel. Kolla upp hur man öppnar en csv-fil i excel med utf-8, eller prova en annan encoding när du sparar till fil (som argument i to_csv alltså). 

Detta kanske kan vara till hjälp: https://hilton.org.uk/blog/csv-excel

tomast80 4213
Postad: 12 aug 2023 12:26
Hondel skrev:

Jag står kvar vid att det är encoding som är fel. Kolla upp hur man öppnar en csv-fil i excel med utf-8, eller prova en annan encoding när du sparar till fil (som argument i to_csv alltså). 

Detta kanske kan vara till hjälp: https://hilton.org.uk/blog/csv-excel

Tack för tipset, jag kollar på länken! 🙏

tomast80 4213
Postad: 17 aug 2023 08:35

Med följande kod så fungerade det att öppna filen direkt i excel:

output.dropna().to_csv(loc_output,index=False,encoding='utf-8-sig')
Svara Avbryt
Close