アプリ版:「スタンプのみでお礼する」機能のリリースについて

pythonでExcelファイルを読み込む時、日付データが「2022-12-28 00:00:00」となってしまいます。
「2022/12/28」形式にしたいのですが、
ファイルを読み込む際に表示形式を指定、または、読み込んでから一括変換を行いたいです。

日付データですが、列で日付が並んでいるのではなく、行で並んでおります。
[df['A']=pd.to_datetime((df['A']), format='%Y%m%d')]
列だと上記でできると思うのですが、行だとどのようにすればよろしいでしょうか。

ご教示いただけますと幸いでございます。
何卒、宜しくお願いいたします。

A 回答 (2件)

うーん、タイトル列に文字列と日付が混じっているのですね。


タイトル行の書き換えを下記のようにしてみてください。
df.columns=list(df.columns[:6])+list(map(lambda x:x.strftime('%Y/%m/%d'),df.columns[6:]))
あるいは、先に
import datetime
しておいて
df.columns=list(map(lambda x:x.strftime('%Y/%m/%d') if type(x)==datetime.datetime else x,df.columns))
後者の方法だとタイトル行に文字列と日付が任意に混じっていても全て文字列に変換されます。
    • good
    • 0
この回答へのお礼

文字列と日付が混じっているとよくないのですね……

両方とも「'Index' object is not callable」のエラーが出てしまいます。
前者は「list(df.columns[:6])」、
後者は「list(map(lambda x:x.strftime('%Y/%m/%d') if type(x)==datetime.datetime else x,df.columns))」
の部分で発生していると思われます。

データの型がおかしいのかと思いますので確認してみます。
ありがとうございます。

お礼日時:2022/11/24 22:10

うーん、ExcelファイルをPythonの何で読み込んでいるんですかね。

dfとかpdと書いているし
import pandas as pd
df = pd.reaqd_excel('A.xlsx')
のような感じでしょうか。
それで日付データが入っているのは最初の行でしょうか。
そうすると日付データはdfの列名で、df.columnsはDatetimeIndex型で各要素はdatetime64[ns]型です。ただしdf.columns[0]のように要素を取るとpd.Timestamp型になります。どれも文字列型ではないので'2022-12-28 00:00:00'や'2022/12/28'のような形式には意味がありません。文字列としての書式は文字列かする際に考えることになります。
なお
df.columns=df.columns.strftime('%Y/%m/%d')
のように変換するとdf.columnsはIndex型になり、各要素はobject型になります。このobjectは'2022/12/28'形式の文字列です。これがご所望の結果と思います。
なお日付が入っているのが最初の行でない場合はまた異なりますので補足ください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
説明不足で申し訳ございません。
pandasでExcelを読み込んでおります。

import pandas as pd
df = pd.read_excel('A.xlsx')
df.columns=df.columns.strftime('%Y/%m/%d')

とすると、
'Index' object has no attribute 'strftime'
のエラーがでてしまいます。

A.xlsxの中身は1行目のA~E列まで文字列が入っており、
F列は空白G~NG列まで日付が入っております。(1年分の日付)

お礼日時:2022/11/24 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A