2017-02-09 11 views
0

で私は私の問題に比較的簡単な解決策があることを願っています。スプリットCSVは、日付

私はcsvを日付フィールドの月に基づいて複数のファイルに分割したいと考えています。

例えば:私は、などがあるでしょう。この場合

2016年10月の前に、すべてのまで、他に2015年4月の前に、1つのファイルで2015年3月の前にすべてをすべてのレコードを持ってできるようにしたいと思いますファイル間で多くの重複レコード。

単純なビットのPythonコードでこれを行う方法はありますか?それとも簡単な方法がありますか?

事前

+2

安心してPythonでやり遂げることができます:) これまでに何をしていますか?データの例を共有できますか? – zipa

+0

デリミタで手作業でしようとしていた瞬間に、200万を超えるレコードがあり、共有が非常に難しいという問題があります。これは、15年の期間にわたる家計売りデータで、「価格を支払った」フィールド、「販売日」、「座標」などです。 – Jamie

+1

アドバイスの単語 - 実際のデータを共有しないでください。一方で、誰かがあなたを助けたり助言を与えることができるように、あなたのデータの例を共有することが不可欠です。あなたのソースと同じ方法でフォーマットされたデータを持つ5行のスライスで十分です。 – zipa

答えて

0

のおかげでこのコードは、日付フィールドは、最初の列にあり、「dates」というラベルが付いていることを前提としています。私たちはパンダを使ってデータをデータフレームに読み込み、['dates']を日付オブジェクトに変換する列として渡します。次に、サブセット化されたビューを作成するために、年と月を使用してデータフレームの異なるスライスを取ります。各ビューは、その後これを行うには良い方法はおそらくあり形式year_month.csv

import pandas as pd 

df = pd.read_csv('filename.csv', parse_dates=['dates']) 

for year in df.dates.apply(lambda x: x.year).unique(): 
    for month in df.dates.apply(lambda x: x.month).unique(): 
     view = df[df.dates.apply(lambda x: x.month == month and x.year==year)] 
     if view.size: 
      view.to_csv('{}_{:0>2}.csv'.format(year, month)) 

で新しいCSVにダンプされますが、これは仕事を得るでしょう。

+0

助けてくれてありがとう、ジェームズ。私は属性のエラーを取得しているコードを実行しています: 'str'オブジェクトに属性 '年'がありません:これは、フィールドの日付の形式とは関係がありますか?現在はdd/mm/yyyyです。 – Jamie

+0

日付の列の見出しは何ですか?これは 'parse_dates'キーワード入力に渡す必要があります。 – James