web-dev-qa-db-ja.com

Python Pandas read_Excel dtype strは、読み取り時またはto_csvを介して書き込み時にnanを空白( '')に置き換えます

Pythonバージョン:Python 2.7.13 :: Anacondaカスタム(64ビット)Pandasバージョン:pandas 0.20.2

こんにちは、

非常に単純な要件があります。 Excelファイルを読み取り、csvファイルに特定のシートを書き込みたいです。ソースExcelファイル内の空白値は、csvファイルを書き込むときに空白として扱われるか、書き込まれる必要があります。ただし、空のレコードは常に出力ファイルに「nan」として書き込まれます。 (引用符なし)

メソッド経由でExcelファイルを読みます

read_Excel(xlsx、sheetname = 'sheet1'、dtype = str)

数値ですが、文字列として扱う必要のある列があるため、dtypeを指定しています。 (それ以外の場合、先頭の0などが失われる可能性があります)つまり、すべてのセルから正確な値を読み取りたいのです。

次に、出力.csvファイルをto_csv(output_file、index = False、mode = 'wb'、sep = '、'、encoding = 'utf-8')で書き込みます

ただし、結果のCSVファイルには、Excelファイルのすべての空白セルのnanが含まれています。

私は何が欠けていますか?私はすでに.fillna( ''、inplace = True)関数を試しましたが、データには何もしていません。また、パラメーターna_rep = ''をto_csvメソッドに追加しようとしましたが、成功しませんでした。

助けてくれてありがとう!

補遺:以下、再現可能な例を見つけてください。

今後、再現可能なサンプルコードを見つけてください。最初に、次のコンテンツを含む2列の新しいExcelファイルを作成してください:COLUMNA COLUMNB COLUMNC 01 test 02 test
03テスト

(このExcelファイルをc:\ test.xlsに保存しました。列Bの1行目と3行目、および列Cの2行目が空白/空であることに注意してください)

ここに私のコードがあります:

import pandas as pd
xlsx = pd.ExcelFile('c:\\test.xlsx')
df = pd.read_Excel(xlsx, sheetname='Sheet1', dtype = str)
df.fillna('', inplace=True)
df.to_csv('c:\\test.csv', index=False,mode='wb',sep=',',encoding='utf-8', na_rep ='')

私の結果は次のとおりです。
COLUMNA、COLUMNB、COLUMNC
01、nan、test
02、test、nan
03、nan、test

私の望ましい結果は次のとおりです。
COLUMNA、COLUMNB、COLUMNC
01、、test
02、テスト、
03、、test

9
panda

nan文字列を扱っているため、 replace 関数を使用できます。

df = pd.DataFrame({'Col1' : ['nan', 'foo', 'bar', 'baz', 'nan', 'test']})
df.replace('nan', '')

   Col1
0      
1   foo
2   bar
3   baz
4      
5  test

すべての'nan'文字列値は、空の文字列''に置き換えられます。 replaceはインプレースではないため、必ず割り当て直してください。

df = df.replace('nan', '')

その後、to_csvを使用してファイルに書き込むことができます。


実際にNaN値を空白で埋めたい場合は、fillnaを使用します。

df = df.fillna('')    
10
cs95