辞書を使用すると、その順序が保証されないため危険です。意味、あなたが最初にthird_col
を選んだ場合、あなたはあなたの全体の計画をスローしました。リストを使ってこれを修正できます。そこから、pd.read_fwf
を使用して、固定形式のテキストファイルを読むことができます。
ソリューション
names = ['first_col', 'second_col', 'third_col']
widths = [3, 5, 2]
pd.read_fwf(
'myfile.txt',
widths=widths,
names=names
)
first_col second_col third_col
0 ABC 123-3 YN
あなたはまた、collections
ライブラリからOrderedDict
を使用して、正しい順序
from collections import OrderedDict
names = ['first_col', 'second_col', 'third_col']
widths = [3, 5, 2]
header = OrderedDict(zip(names, widths))
pd.read_fwf(
'myfile.txt',
widths=header.values(),
names=header.keys()
)
first_col second_col third_col
0 ABC 123-3 YN
でタプルを生成イテレータを渡すことで、必要な秩序を維持することを確認することができますデモ
from collections import OrderedDict
txt = """ABC123-3YN0000000001203ABC123*TESTINGLINE"""
names = ['first_col', 'second_col', 'third_col']
widths = [3, 5, 2]
header = OrderedDict(zip(names, widths))
pd.read_fwf(
'myfile.txt',
widths=header.values(),
names=header.keys()
)
first_col second_col third_col
0 ABC 123-3 YN
io.common.StringIOはhttps://docs.python.org/2/library/stringio.html#module-cStringIOよりも優れていますか? –
また、「OrderedDictコンストラクタとupdate()メソッドは両方ともキーワード引数を受け入れますが、Pythonの関数呼び出しセマンティクスは正規の順序付けられていない辞書を使ってキーワード引数を渡すため、その順序が失われます。 –
「StringIO」に関して、私はどんな主張をしているのかは分かりません。私は 'pd.io.common'を使用しました。あなたがすでにインポートしていることが分かっているからです。 – piRSquared