read_csv
を使用して、Pandas=データフレームにスタディデータをインポートしています。
私のサブジェクトコードは、特に誕生日の6桁のコードです。一部の被験者では、これにより、先頭にゼロが付いたコードが生成されます(例: "010816")。
Pandasにインポートすると、先頭のゼロが取り除かれ、列はint64
としてフォーマットされます。
この列を変更せずに文字列としてインポートする方法はありますか?
列にカスタムコンバーターを使用しようとしましたが、機能しません。Pandasがintに変換される前にカスタム変換が行われるようです。
この質問/回答 by Lev Landa に示されているように、read_csv
の特定の列にconverters
オプションを使用する簡単な解決策があります。関数。
converters={'column_name': lambda x: str(x)}
Pandas.io.parsers.read_csv documentation でread_csv
機能のオプションを参照できます。
以下のようなcsvファイルprojects.csv
があるとしましょう:
project_name,project_id
Some Project,000245
Another Project,000478
以下の例では、コードは先行ゼロをトリミングしています。
import csv
from pandas import read_csv
dataframe = read_csv('projects.csv')
print dataframe
結果:
me@ubuntu:~$ python test_dataframe.py
project_name project_id
0 Some Project 245
1 Another Project 478
me@ubuntu:~$
ソリューションコードの例:
import csv
from pandas import read_csv
dataframe = read_csv('projects.csv', converters={'project_id': lambda x: str(x)})
print dataframe
必要な結果:
me@ubuntu:~$ python test_dataframe.py
project_name project_id
0 Some Project 000245
1 Another Project 000478
me@ubuntu:~$
短く、堅牢で完全に機能するソリューションを次に示します。
変数名と目的のデータ型の間のマッピング(辞書)を定義するだけです。
_dtype_dic= {'subject_id': str,
'subject_number' : 'float'}
_
pd.read_csv()
でそのマッピングを使用します:
_df = pd.read_csv(yourdata, dtype = dtype_dic)
_
出来上がり!
多数の列があり、どの列に欠落している可能性のある先行ゼロが含まれているかわからない場合、またはコードを自動化する必要がある場合があります。次のことができます。
df = pd.read_csv("your_file.csv", nrows=1) # Just take the first row to extract the columns' names
col_str_dic = {column:str for column in list(df)}
df = pd.read_csv("your_file.csv", dtype=col_str_dic) # Now you can read the compete file
次のこともできます。
df = pd.read_csv("your_file.csv", dtype=str)
これにより、すべての列が文字列として取得され、先行ゼロが失われることはありません。
あなたが望むように列タイプを指定できるとは思わない(変更が頻繁に行われておらず、6桁の数値がdatetimeに変換できる日付でない場合)。 np.genfromtxt()
を使用して、そこからDataFrame
を作成してみてください。
編集:Wes Mckinneyの blog をご覧ください。何か役に立つかもしれません。 pandas 0.10
の新しいパーサーが11月に登場するようです。
幅がわかっている場合は、converters
を使用して数値を固定幅に変換できます。
たとえば、幅が5の場合、
data = pd.read_csv('text.csv', converters={'column1': lambda x: f"{x:05}"})
これでうまくいきます。 pandas == 0.23.0およびread_Excel
。
Python3.6以降が必要です。