iT邦幫忙

1

python題目請教,把表格的其中一欄分開存成兩個欄位

  • 分享至 

  • xImage

我現在有如下圖這樣的一個表格,想要把MonitorMonth的部分分成year(2021)跟month(10)兩個欄位
[https://media.discordapp.net/attachments/1005636651667697666/1047733169912295424/2022-12-01_123528.png]

想問看看該怎麼寫

froce iT邦大師 1 級 ‧ 2022-12-01 16:25:07 檢舉
df['year'] = df['MonitorMonth'].apply(lambda x: x[:4])
month自己改。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
tryit
iT邦研究生 4 級 ‧ 2022-12-01 14:35:02
最佳解答

就把MonitorMonth讀出來,把前四個字元跟後兩個字元分開,分別存入新欄位就好。
重點是你是怎麼儲存這個表格的,EXCEL?Panda dataframe?database?

給你一個讀起來應該滿輕鬆的程式碼,你可以再依照想法去修改

import pandas as pd
a = {"MonitorMonth":["202110","123412","113007"]}
data3 = pd.DataFrame(a)
temp = data3["MonitorMonth"] #讀出該欄位
data4 = pd.DataFrame({"year":[],"month":[]})
#新的dataframe,當然如果你直接新增在舊dataframe處理其實更方便
for i in temp:
    data4.loc[len(data4.index)] = [i[:-2],i[-2:]]
ans = pd.concat([data3,data4],axis=1)#合併
print(ans)
#  MonitorMonth  year month
#0       202110  2021    10
#1       123412  1234    12
#2       113007  1130    07
ans = ans.drop(["MonitorMonth"],axis=1)#刪除掉不需要的資料
print(ans)
#   year month
#0  2021    10
#1  1234    12
#2  1130    07

不過我平常會這樣寫啦,簡單很多,不過要看你會不會lambda

import pandas as pd
a = {"MonitorMonth":["202110","123412","113007"]}
data3 = pd.DataFrame(a)
data3['year'] = data3["MonitorMonth"].apply(lambda x:x[:-2])
data3['month'] = data3["MonitorMonth"].apply(lambda x:x[-2:])
data3 = data3.drop(["MonitorMonth"],axis=1)#刪除掉不需要的資料
print(data3)
看更多先前的回應...收起先前的回應...

是Panda dataframe,不過單把MonitorMonth讀出來之後不知道該怎麼把前四個字元跟後兩個字元分開

程式碼目前是輸這樣

a=csv.iloc[:,[6]]
tryit iT邦研究生 4 級 ‧ 2022-12-01 17:19:33 檢舉

blacksar111 喔~
晚點示範給你看

tryit iT邦研究生 4 級 ‧ 2022-12-02 04:21:51 檢舉

blacksar111 參考看看吧

tryit[https://ithelp.ithome.com.tw/upload/images/20221202/20153867hdECc4fsnh.jpg]
我試著帶入之後結果顯示這樣@@

tryit iT邦研究生 4 級 ‧ 2022-12-02 22:09:36 檢舉

blacksar111上面有寫啊,typeerror,你日期是用數字儲存的吧,先用str()轉成文字再切割,切完再轉成數字就好

tryit iT邦研究生 4 級 ‧ 2022-12-03 01:46:12 檢舉

blacksar111
data3['year'] = data3["MonitorMonth"].apply(lambda x:int(str(x)[:-2]))
下一行以此類推

tryit喔喔,原來如此,那我想再問看看如果想以SiteName測站與ItemName、月為單位計算每月污染物平均值的話該怎麼寫
想得到的結果長這樣
https://ithelp.ithome.com.tw/upload/images/20221203/20153867ACzJhJDB3W.jpg

目前是寫這樣,不知道該如何修改
https://ithelp.ithome.com.tw/upload/images/20221203/20153867qi1HmZPGUb.jpg

tryit iT邦研究生 4 級 ‧ 2022-12-03 22:24:48 檢舉

blacksar111誒,你要不要分成下一題問,要不然會有點亂

tryit
喔喔好的,我另外po了一篇https://ithelp.ithome.com.tw/questions/10211174

那這邊我就先選為最佳解答了

0
hokou
iT邦好手 1 級 ‧ 2022-12-02 12:40:47

查到一種做法可以用 str 來切,就紀錄一下

import pandas as pd

df = pd.DataFrame(
    {
    "name":["202201", "202202"]
    }
)

df["year"] = df["name"].str[:-2]
df["month"] = df["name"].str[-2:]

print(df)
     name  year month
0  202201  2022    01
1  202202  2022    02

==
[Day13]Pandas處理字串資料!(下)

嗯嗯,這也是不錯的參考,謝謝你

我要發表回答

立即登入回答