python - 如何简单地设置数据框以包含结果?
问题描述
query
并且get_fundamentals
是一些APP的api
,指出是哪个无所谓api
。
下面是我使用数据框的片段。
code = "some"
caldate = [datetime.date(2003, 12, 31),datetime.date(2004, 12, 31),
datetime.date(2005, 12, 31), datetime.date(2006, 12, 31)]
for curdate in caldate:
q = query(valuation.market_cap).filter(valuation.code == code)
y = get_fundamentals(q,date=curdate)
print(y)
输出如下:
Empty DataFrame
Columns: [market_cap]
Index: []
Empty DataFrame
Columns: [market_cap]
Index: []
market_cap
0 215.2808
market_cap
0 828.9395
我希望创建一个包含所有输出的数据框。
container
market_cap
0 NaN
1 NaN
2 215.2808
3 828.9395
type(container)
<class 'pandas.core.frame.DataFrame'>
我尝试使用 concat(失败):
result = pd.DataFrame(columns=['market_cap'])
for curdate in caldate:
q = query(valuation.market_cap).filter(valuation.code == code)
y = get_fundamentals(q,date=curdate)
pd.concat([result,y],axis = 0)
输出:
Empty DataFrame
Columns: [market_cap, market_cap]
Index: []
Empty DataFrame
Columns: [market_cap, market_cap]
Index: []
market_cap market_cap
0 NaN 215.2808
market_cap market_cap
0 NaN 828.9395
>>> result
Empty DataFrame
Columns: [market_cap]
Index: []
另一个尝试(失败):
result = pd.DataFrame(columns=['market_cap'])
for curdate in caldate:
q = query(valuation.market_cap).filter(valuation.code == code)
y = get_fundamentals(q,date=curdate)
result = result.append(y)
打印结果看看我得到了什么:
result
market_cap
0 215.2808
0 828.9395
期望的结果:
market_cap
0 NaN
1 NaN
2 215.2808
3 828.9395
前两个空的丢失了。
另一个尝试(成功):设置一个列表以添加输出,然后将其分配给数据框。
result = []
for curdate in caldate:
q = query(valuation.market_cap).filter(valuation.code == code)
y = get_fundamentals(q,date=curdate)['market_cap']
if y.empty:
result.append(numpy.nan)
else:
result.append(y[0])
container = pd.DataFrame()
container['market_cap'] = result
也许有一种更简单、更 Pythonic 的方式来实现我的期望。
@YOLO,print(result) 根据您的代码。
result
market_cap
0 Empty DataFrame
Columns: [market_cap]
Index: []
1 Empty DataFrame
Columns: [market_cap]
Index: []
2 market_cap
0 215.2808
3 market_cap
0 828.9395
显示结果中的每个元素。
>>> result["market_cap"][0]
Empty DataFrame
Columns: [market_cap]
Index: []
>>> result["market_cap"][1]
Empty DataFrame
Columns: [market_cap]
Index: []
>>> result["market_cap"][2]
market_cap
0 215.2808
>>> result["market_cap"][3]
market_cap
0 828.9395
我的期望:
>>> result["market_cap"][0]
nan
>>> result["market_cap"][1]
nan
>>> result["market_cap"][2]
215.2808
>>> result["market_cap"][3]
828.9395
解决方案
你很亲密。类似于你最后一步的东西应该可以工作:
result = []
for curdate in caldate:
q = query(valuation.market_cap).filter(valuation.code == code)
y = get_fundamentals(q,date=curdate) # assuming this returns a NaN or some numeric
result.append(y)
result = pd.DataFrame(result, columns=['market_cap'])
推荐阅读
- javascript - 在 p5.js 中在屏幕上移动一个球
- java - Java:误解泛型和通配符
- java - Spring boot:java.lang.IllegalStateException:响应提交后无法调用 sendError()
- javascript - 如何在 JavaScript 中标记整个正则表达式?
- python - 使用 OWLReady 库运行 Hermit resoner 时出现 OwlReadyInconsistentOntologyError
- scala - 如何在 Akka 中使用 Behaviors.canonicalize
- java - 如何在多模块硒自动化项目中创建“fatjar”?
- bash - 在 if bash 语句中检查命令的返回值
- visual-studio-code - 当我将 .html.eex 文件的文件语言类型更改为“HTML (EEx)”时,HTML 自动完成/片段停止工作
- c# - 如何在 Quartz 调度程序中每 3 分钟运行一次?