亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Python中獲取csv所有列中特定類別的日期時間值作為結果?

如何在Python中獲取csv所有列中特定類別的日期時間值作為結果?

心有法竹 2024-01-27 16:27:29
我有一個 csv 文件,其中包含 20 天內用戶社交媒體活動的值 我想獲取第一天用戶活動的詳細信息 以下是 csv 中條目的示例DateTime                  Instagram  Facebook   Twitter(2020,09,01,10,00,00)        Y          N         Y(2020,09,01,10,01,00)        N          Y         Y(2020,09,01,10,02,00)        N          Y         N(2020,09,01,10,03,00)        N          Y         N(2020,09,01,10,04,00)        Y          N         Y(2020,09,01,11,00,00)        Y          N         N(2020,09,02,10,00,00)        N          Y         Y(2020,09,02,10,00,00)        Y          N         N(2020,09,02,10,00,00)        N          N         N(2020,09,03,10,00,00)        Y          Y         YY 代表用戶處于活動狀態,N 代表用戶處于非活動狀態 我想顯示第一天(即2020-09-012020 年 9 月 1 日)所有應用程序的活動統計信息。所以我希望結果看起來像這樣(只有用戶在該應用程序上處于活動狀態(Y)的日期時間值){'Instagram':[(2020,09,01,10,00,00),(2020,09,01,10,04,00),(2020,09,01,11,00,00)], 'Facebook':[(2020,09,01,10,01,00), (2020,09,01,10,02,00), (2020,09,01,10,03,00)], 'Twitter':[(2020,09,01,10,00,00), (2020,09,01,10,01,00), (2020,09,01,10,04,00)]}我寫了一段代碼,但它沒有提供我想要的結果df['DateTime'] = pd.to_datetime(df['DateTime'], format='(%Y,%m,%d,%H,%M,%S)')for idx, d in df.groupby(df['DateTime'].dt.date):    print(d.drop('DateTime', axis=1).to_dict('list'))This was the result I got    {'Instagram': ['Y', 'N', 'N', 'N', 'Y', 'Y'], 'Facebook': ['N', 'Y', 'Y', 'Y', 'N', 'N'], 'Twitter': ['Y', 'Y', 'N', 'N', 'Y', 'N']}{'Instagram': ['N', 'Y', 'N'], 'Facebook': ['Y', 'N', 'N'], 'Twitter': ['Y', 'N', 'N']}{'Instagram': ['Y'], 'Facebook': ['Y'], 'Twitter': ['Y']}DateTime 列由日期時間對象格式的值組成,我將其轉換為 pandas 日期時間格式
查看完整描述

2 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

將值轉換為新列,按 過濾第一個日期boolean indexing,然后按 unpivotDataFrame.melt和 aggreagate?list


df['d'] = pd.to_datetime(df['DateTime'], format='(%Y,%m,%d,%H,%M,%S)')


day1 = df['d'].dt.date[0]

df = df[df['d'].dt.date.eq(day1)]?


df = df.melt(['DateTime','d'])?

df = df[df['value'].eq('Y')]?



d = df.groupby('variable')['DateTime'].agg(list).to_dict()

print (d)

{'Facebook': ['(2020,09,01,10,01,00)', '(2020,09,01,10,02,00)', '(2020,09,01,10,03,00)'],?

?'Instagram': ['(2020,09,01,10,00,00)', '(2020,09,01,10,04,00)', '(2020,09,01,11,00,00)'],?

?'Twitter': ['(2020,09,01,10,00,00)', '(2020,09,01,10,01,00)', '(2020,09,01,10,04,00)']}

如果需要輸出datetime嵌套字典中的每個:


df['d'] = pd.to_datetime(df['DateTime'], format='(%Y,%m,%d,%H,%M,%S)')


df = df.melt(['DateTime','d'])?

df = df[df['value'].eq('Y')]?


s = df.groupby([df['d'].dt.strftime('%Y-%m-%d'), 'variable'])['DateTime'].agg(list)

print (s)


d1 = {level: s.xs(level).to_dict() for level in s.index.levels[0]}

print (d1)

{'2020-09-01': {'Facebook': ['(2020,09,01,10,01,00)', '(2020,09,01,10,02,00)', '(2020,09,01,10,03,00)'],?

? ? ? ? ? ? ? ? 'Instagram': ['(2020,09,01,10,00,00)', '(2020,09,01,10,04,00)', '(2020,09,01,11,00,00)'],

? ? ? ? ? ? ? ? 'Twitter': ['(2020,09,01,10,00,00)', '(2020,09,01,10,01,00)', '(2020,09,01,10,04,00)']},

?'2020-09-02': {'Facebook': ['(2020,09,02,10,00,00)'],?

? ? ? ? ? ? ? ? 'Instagram': ['(2020,09,02,10,00,00)'],?

? ? ? ? ? ? ? ? 'Twitter': ['(2020,09,02,10,00,00)']},?

?'2020-09-03': {'Facebook': ['(2020,09,03,10,00,00)'],?

? ? ? ? ? ? ? ? 'Instagram': ['(2020,09,03,10,00,00)'],?

? ? ? ? ? ? ? ? 'Twitter': ['(2020,09,03,10,00,00)']}}


print (d1['2020-09-01'])

{'Facebook': ['(2020,09,01,10,01,00)', '(2020,09,01,10,02,00)', '(2020,09,01,10,03,00)'],?

?'Instagram': ['(2020,09,01,10,00,00)', '(2020,09,01,10,04,00)', '(2020,09,01,11,00,00)'],

?'Twitter': ['(2020,09,01,10,00,00)', '(2020,09,01,10,01,00)', '(2020,09,01,10,04,00)']}


print (d1['2020-09-02'])

{'Facebook': ['(2020,09,02,10,00,00)'], 'Instagram': ['(2020,09,02,10,00,00)'], 'Twitter': ['(2020,09,02,10,00,00)']}



查看完整回答
反對 回復 2024-01-27
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

使用readline逐行讀取file.csv。然后你應該將 Instagram 的日期時間(在“Y”的情況下,所以使用 if)收集在一個列表中。對 Facebook 和 Twitter 執行同樣的操作。


所以,這是總體方法:


Instagram=[] #make an empty list

for row in file.readlines():  #read line by line of your file

    row2=row.split(';')  #split elements and make a list with name row2

    if str(row2[1])=="Y": Instagram.append(row2[0]) # add date time to instagram list

    #do the same for facebook and twitter

print(Instagram)


查看完整回答
反對 回復 2024-01-27
  • 2 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號