我正在尝试将 json 文件加载到 Pandas 数据框。我发现有一些嵌套的json。下面是示例 json:
{'events': [{'id': 142896214,
'playerId': 37831,
'teamId': 3157,
'matchId': 2214569,
'matchPeriod': '1H',
'eventSec': 0.8935539999999946,
'eventId': 8,
'eventName': 'Pass',
'subEventId': 85,
'subEventName': 'Simple pass',
'positions': [{'x': 51, 'y': 49}, {'x': 40, 'y': 53}],
'tags': [{'id': 1801, 'tag': {'label': 'accurate'}}]}
Run Code Online (Sandbox Code Playgroud)
我使用以下代码将 json 加载到数据帧中:
with open('EVENTS.json') as f:
jsonstr = json.load(f)
df = pd.io.json.json_normalize(jsonstr['events'])
Run Code Online (Sandbox Code Playgroud)
下面是 df.head() 的输出
但是我发现了两个嵌套的列,例如位置和标签。
我尝试使用以下代码将其展平:
Position_data = json_normalize(data =jsonstr['events'], record_path='positions', meta = ['x','y','x','y'] )
Run Code Online (Sandbox Code Playgroud)
它向我显示了如下错误:
KeyError: "Try running with errors='ignore' as key 'x' is …Run Code Online (Sandbox Code Playgroud) 我正在使用 scipy stats 生成一个随机数。我使用了泊松分布。下面是一个例子:
import scipy.stats as sct
A =2.5
Pos = sct.poisson.rvs(A,size = 20)
Run Code Online (Sandbox Code Playgroud)
当我打印 Pos 时,我得到以下数字:
array([1, 3, 2, 3, 1, 2, 1, 2, 2, 3, 6, 0, 0, 4, 0, 1, 1, 3, 1, 5])
Run Code Online (Sandbox Code Playgroud)
从数组中可以看到生成了一些数字,例如6。
我想要限制最大数字(假设是 5),即使用 sct.poisson.rvs 生成的任何随机数都应该等于或小于 5,
我如何调整我的代码来实现它。顺便说一句,我在 Pandas Dataframe 中使用它。
我有以下数据帧:
import pandas as pd
df = pd.DataFrame(
{
'id': [1, 1, 1, 1, 2, 2,2, 2, 3, 3, 3, 3],
'name': ['A', 'B', 'C', 'D','A', 'B','C', 'D', 'A', 'B','C', 'D'],
'Value': [1, 2, 3, 4, 5, 6, 0, 2, 4, 6, 3, 5]
},
columns=['name','id','Value'])`
Run Code Online (Sandbox Code Playgroud)
我可以使用id和value对数据进行排序,如下所示:
df.sort_values(['id','Value'],ascending = [True,False])
Run Code Online (Sandbox Code Playgroud)
我打印的表格将显示如下:
name id Value
D 1 4
C 1 3
B 1 2
A 1 1
B 2 6
A 2 5
D 2 2
C 2 0
B 3 …Run Code Online (Sandbox Code Playgroud) 嗨,我有以下数据框:
import numpy as np
import pandas as pd
df = pd.DataFrame()
df['T1'] = ['A','B','C','D','E']
df['T2'] = ['G','H','I','J','K']
df['Match'] = df['T1'] +' Vs '+ df['T2']
Nsims = 5
df1 = pd.DataFrame((pd.np.tile(df,(Nsims,1))))
Run Code Online (Sandbox Code Playgroud)
我通过对五个随机数求和创建了两个新列T1_point和T2_point。当我如下时:它给我所有行相同的数字。
Ninit = 5
df1['T1_point'] = np.sum(np.random.uniform(size=Ninit))
df1['T2_point'] = np.sum(np.random.uniform(size=Ninit))
Run Code Online (Sandbox Code Playgroud)
我想做的是,我想通过使用随机数为每一行获取不同的值。
我该怎么办?
谢谢
齐普
pandas ×3
python ×3
dataframe ×1
flatten ×1
json ×1
poisson ×1
python-3.x ×1
random ×1
scipy ×1
statistics ×1