2

年が 1900 より前のスプレッドシートの Date 列のすべての日付値を今日の日付に変更しようとしているので、スライスがあります。

編集: コードの前の行:

df=pd.read_excel(filename)#,usecols=['NAME','DATE','EMAIL']
#regex to remove weird characters
df['DATE'] = df['DATE'].str.replace(r'[^a-zA-Z0-9\._/-]', '')
df['DATE'] = pd.to_datetime(df['DATE'])

sample row in dataframe: name, date, email
[u'Public, Jane Q.\xa0' u'01/01/2016\xa0' u'jqpublic@email.com\xa0'] 

このコード行は機能します。

df["DATE"][df["DATE"].dt.year < 1900] = dt.datetime.today()

次に、すべての日付値がフォーマットされます。

df["DATE"] = df["DATE"].map(lambda x: x.strftime("%m/%d/%y"))

しかし、私はエラーが発生します:

SettingWithCopyWarning:  A value is trying to be set on a copy of a
slice from a DataFrame

See the caveats in the documentation:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-

対コピー

.loc の使用が推奨されているドキュメントやその他の投稿を読みました

推奨される解決策は次のとおりです。

df.loc[row_indexer,col_indexer] = value

しかしdf["DATE"].loc[df["DATE"].dt.year < 1900] = dt.datetime.today()、行番号が実際にはスクリプトの最後の行の後の行番号であることを除いて、同じエラーが発生します。

私の例に関連しているため、ドキュメントが何を伝えようとしているのか理解できません。

スライスを取り出して別のデータフレームに割り当てることをいじり始めましたが、それらを再びまとめる必要があります。

4

2 に答える 2

1

df["DATE"]その後、セレクター[df["DATE"].dt.year < 1900]を使用してそれに割り当てようとすると、ビューが生成されます。

df["DATE"][df["DATE"].dt.year < 1900]パンダが不平を言っているビューです。

次のように修正しlocます。

df.loc[df.DATE.dt.year < 1900, "DATE"] = pd.datetime.today()
于 2016-07-16T23:09:25.947 に答える
1

私の考えは、あなたができるだろうということです

df.loc[df.DATE.dt.year < 1900, "DATE"] = dt.datetime.today()
df.loc[:, "DATE"] = df.DATE.map(lambda x: x.strftime("%m/%d/%y")

コンピューターではないのでテストできませんが、そうするべきだと思います。

于 2016-07-16T19:53:13.617 に答える