iT邦幫忙

0

[程式新手發問] Pandas 資料合併問題

各位前輩好, 小弟是剛接觸 Python 的新手
以下是小弟的 DataFrame 資料, 資料夾內有數份 json 檔
目前先讀取了兩份 json 轉成 DataFrame 格式後如下圖

import json
import pandas as pd

Data1 = pd.read_json("D:/PHM/正常/Data1.json")
Data2 = pd.read_json("D:/PHM/正常/Data2.json")
DataFrame1 = pd.DataFrame(Data1) # 轉成 DataFrame
DataFrame2 = pd.DataFrame(Data2) 
display(DataFrame1,DataFrame2)

https://ithelp.ithome.com.tw/upload/images/20200922/20123641XKrzyivHDi.png

假如資料內我只需要其中一列 "DSY"
欲將兩份資料的 DSY 合併成一份資料 (不是串聯而是並列的方式)
應該使用那些程式碼來完成呢?
目前找到的方法最接近的應該是 insert 的方式, 可是試了幾次達不到想要的效果
麻煩各位前輩指點, 謝謝~

DataFrame_DSY1 = DataFrame1[["DSY"]] # 取出 DSY
DataFrame_DSY2 = DataFrame2[["DSY"]]
display(DataFrame_DSY1,DataFrame_DSY2)

https://ithelp.ithome.com.tw/upload/images/20200922/20123641j25iIjv2LK.png

1 個回答

2
listennn08
iT邦高手 7 級 ‧ 2020-09-22 11:33:24
最佳解答

並列是指這樣?

import pandas as pd
import numpy as np

json1 = pd.read_json('./data.json')
json2 = pd.read_json('./data2.json')

mergeData = np.array([json1['DSY'], json2['DSY']]).T
df = pd.DataFrame(data=mergeData, columns=['DSY', 'DSY'])
print(df)
#    DSY  DSY
# 0   11   21
# 1   12   22
data.json
[
  {
    "DSY": 11,
    "DSX": 2,
  },
  {
    "DSY": 12,
    "DSX": 2,
  }
]
data2.json
[
  {
    "DSY": 21,
    "DSX": 22,
  },
  {
    "DSY": 22,
    "DSX": 23,
  }
]

repl

看更多先前的回應...收起先前的回應...
jihong620 iT邦新手 5 級 ‧ 2020-09-22 13:06:39 檢舉

對 ~ 這是我要的呈現方式
謝謝你的回答, 原來還能這樣操作 :D

jihong620 iT邦新手 5 級 ‧ 2020-09-22 13:47:57 檢舉

請問當三個 Data 並列的時候還能使用
四個以上的話就會產生 shape 不一樣的錯誤
請問應該如何解決呢?

import json,os
import pandas as pd
import numpy as np

# 讀取程式
Data1 = pd.read_json("D:/PHM/正常/Data1.json")
Data2 = pd.read_json("D:/PHM/正常/Data2.json")
Data3 = pd.read_json("D:/PHM/正常/Data3.json")
Data4 = pd.read_json("D:/PHM/正常/Data4.json")

mergeData = np.array([Data1['DSY'], Data2['DSY'], Data3['DSY'], Data4['DSY']]).T
df = pd.DataFrame(data=mergeData, columns=['DSY1', 'DSY2', 'DSY3', 'DSY4'])
print(df)

https://ithelp.ithome.com.tw/upload/images/20200922/20123641BGVg0CXGZr.png

jihong620
看起來是數據長度不一樣造成的
如果你有要分 1, 2, 3, 4 的話其實可以這樣寫就好

d = {}

d['DSY1'], d['DSY2'], d['DSY3'], d['DSY4'] = Data1['DSY'], Data2['DSY'], Data3['DSY'], Data4['DSY']


df = pd.DataFrame(data=d)
print(df)

原本不這樣寫的原因是 key 沒辦法重複

補充一下 如果檔案名稱夠規律的話 可以直接帶迴圈

d = {}
for i in range(1, 5):
  temp = pd.read_json('./data%s.json' % i)
  d['DSY%s' % i] = temp['DSY']
jihong620 iT邦新手 5 級 ‧ 2020-09-22 14:56:11 檢舉

listennn08
搞笑了.. 回去看數據確實是不一樣大
謝謝你提供這些簡短的寫法, 我再研究一下
/images/emoticon/emoticon41.gif

我要發表回答

立即登入回答