2 種類の日時形式を含む CSV ファイルがあります。後で修正します。列を string / str / object として読み取るように指定してパンダの read_csv 関数を使用している間、両方の日付/時刻形式が Python の目的の日付/時刻形式に結合されます。
以下は私のデータの例です
Date Cost
3/31/2015 3363
2020-16-07 5515
次のコマンドで読んだところ
a = pd.read_csv('data.csv',dtype={'Date':object})
b = pd.read_csv('data.csv',dtype={'Date':'string'})
c = pd.read_csv('data.csv',dtype={'Date':str})
d = pd.read_csv('data.csv',converters={i: str for i in range(100)})
すべての a、b、c、d は次のような同じ結果を生成します。
Date Cost
2015-3-31 3363
2020-16-07 5515
dtypes チェックを実行しました。それは次を使用して返されます。
a.dtypes
b.dtypes
c.dtypes
d.dtypes
すべては日付列のオブジェクトと同じものを返します
前処理して日付と時刻を同じ形式にするために、希望する出力はデータの内容と同じである必要があります。
Date Cost
3/31/2015 3363
2020-16-07 5515
----- 編集 -----
CSV ファイルを再確認してみましたExcel を使用して開き、ファイルを変更せずに保存を再クリックすると、4 つのコマンドで希望したものと同じ結果が得られます。何が問題なのかはわかりませんが、うまくいきます :)
しかし、なぜこのようなことが起こるのか、私はまだ知りたいと思っています。このファイルはクラウドからのもので、私がやったのは再度保存しただけです。
--- 編集 2 ----
メモ帳を使用して開いたところ、Python / Jupyter / Pandas ではなく、Excel がこのような異なる時刻形式を提供していました。
pd.read_csv('data.csv') だけを実行するとどうなるでしょうか?
– トレントマッキニーで
2020 年 9 月 3 日 2:50
1
@TrentonMcKinney こんにちは、お時間をいただきありがとうございます。CSV を再確認し、Excel を使用して変更を加えずに保存機能を再度実行しました。これで、Python によって希望の出力が得られました。とても奇妙です
– ウイング シャム
2020 年 9 月 3 日 3:01
2
ファイルをテキストエディタで開くのではなく、テキストエディタで開いてみましたか?ハンエクセル? Excel が CSV ファイル内のリテラル文字列を誤って表示している可能性があります (CSV ファイルでは 3 月の日付が実際には「2015-3-31」と表示されます)。
– リリスト
2020 年 9 月 3 日 3:13
1
@relizt ああ、ありがとう!メモ帳を使用して開いてみたところ、jupyter が返した内容が表示されました。ありがとう!
– ウイング シャム
2020 年 9 月 3 日 3:15
2
Jupyter に関してはそれほど問題はありません。しかし、オブジェクトはメモリ内に永続的であるため、売り込みで何かをしたり、実際にデータをリロードするのを忘れたりして、予期しない結果が生じることがあります。何かがおかしいと思われる場合は、カーネルを再起動してすべての出力をクリアしてください。
– トレントン・マッキニー
2020 年 9 月 3 日 3:16
------------------------
(元の投稿に関するコメントのディスカッションから、適切な手段と将来の他の人への参照のためにここにコピーします)
これは Excel で問題が発生する場合があります。 CSV は実際には次のようにフォーマットされる場合があります。
Date Cost
2015-3-31 3363
2020-16-07 5515
Excel で開いている場合は、Excel実際には日付が 3/31/2015 や 2020-16-07 のように書式設定されているかのように表示できます。 pandas が csv を読み取るとき、Excel の解釈なしでリテラル文字列が表示されます。