2

日付フィールドをテキストとして含むデータフレームがあります。

以下を使用して、日付フィールドを日時オブジェクトに変換します。

df['日付'] = pd.to_datetime(df['日付'])

やっている:

df['日付']

次のようなものを生成します。

0    2012-06-28 09:36:21
1    2013-05-21 14:52:57
2    2011-10-14 16:31:34
3    2011-11-11 12:51:13
4    2013-02-07 15:33:22
5    2013-01-02 14:40:08
6    2013-06-24 14:49:40
7    2013-07-15 15:29:26
8    2011-11-04 12:17:32
9    2013-04-29 17:31:43
10   2013-06-24 15:00:06
11   2012-10-22 18:23:53
12                   NaT
13                   NaT
14   2011-12-13 10:06:18

ここで、日時オブジェクトを日付オブジェクトに変換します。

df['date'].apply(try_convert_date)

(try_to_convert の定義方法については、以下を参照してください)。私は得る:

0       2012-06-28
1       2013-05-21
2       2011-10-14
3       2011-11-11
4       2013-02-07
5       2013-01-02
6       2013-06-24
7       2013-07-15
8       2011-11-04
9       2013-04-29
10      2013-06-24
11      2012-10-22
12    0001-255-255
13    0001-255-255
14      2011-12-13

「NaT」値は「0001-255-255」に変換されています。これを回避し、これらのセルに「NA」を保持するにはどうすればよいですか?

前もって感謝します

def try_convert_date(obj):

    try:
        return obj.date()
    except: #AttributeError:
        return 'NA'
4

1 に答える 1

3

問題はpd.NaT.date()、エラーが発生せず、 が返さdatetime.date(1, 255, 255)れるため、例外をキャッチするコードの部分に到達しないことです。値が であるかどうかを確認する必要がpd.NaTあり、その場合は「NA」を返します。それ以外の場合はすべてobj.date()、列にdatetime64dtype があるため、安全に戻ることができます。

def try_convert(obj):
    if obj is pd.NaT:
        return 'NA'
    else:
        return obj.date()

n [17]: s.apply(try_convert)
Out[17]:
0     2012-06-28
1     2013-05-21
2     2011-10-14
3     2011-11-11
4     2013-02-07
5     2013-01-02
6     2013-06-24
7     2013-07-15
8     2011-11-04
9     2013-04-29
10    2013-06-24
11    2012-10-22
12            NA
13            NA
14    2011-12-13
Name: 1_2, dtype: object
于 2013-08-13T15:04:36.997 に答える