对变量名使用迭代器的替代方法
Posted
技术标签:
【中文标题】对变量名使用迭代器的替代方法【英文标题】:Alternatives to using an interator for variable names 【发布时间】:2021-06-08 11:25:33 【问题描述】:我对 Python 比较陌生,来自 Stata 背景,并且仍在为一些核心 Python 概念而苦苦挣扎。例如,我目前正在开发一个小程序,该程序点击US Census Bureau API 对一些地址进行地理编码,我的直觉是遍历我的 csv 文件,将它们输入 API 调用,然后使用顺序命名输出迭代器。例如
import censusgeocode
import json
import pandas as pd
cg = censusgeocode.CensusGeocode()
for i in range(1,3):
k = cg.addressbatch('dta/batchfiles/split_test ' + str(i) + '.csv')
json_string = json.dumps(k)
test_i = pd.read_json(json_string)
我知道test_i
语法不正确并且会返回错误,但以上内容让您了解我在概念上尝试做的事情。但是,我在其他地方(例如this SO post)读到这在 Python 中不是一个好方法。 有人可以告诉我什么是更好的方法吗? 将所有 k
s 一起附加到一个巨大的 json 文件中然后一次性转换它们会更好吗?如果是这样,我该怎么做?
我有数百个要循环的 csv 文件,在为每个文件调用 API 后,我想将它们全部附加到一个数据帧中——我不确定这是否有用,但只是想在哪里交流想要最终到达。
任何帮助将不胜感激!
【问题讨论】:
这能回答你的问题吗? How do I create variable variables? 【参考方案1】:也许您可以创建一个主 DataFrame 并向其添加一个表示 i
的额外字段,然后,在循环遍历您的 CSV 文件时,您可以将数据加载为新 DataFrame,将 i-field 添加到每一行并append 读取数据到您的主 DataFrame。
附言在k = cg.addressbatch('dta/batchfiles/split_test ' + str(i) + '.csv')
为此,我建议使用 os.path.join()
【讨论】:
嗨,马可,非常感谢。请问使用os.path.join()
有什么好处?
一个优点是,例如,如果您在使用不同路径名分隔符的操作系统上运行程序(例如 windows 与 linux),它仍然可以工作。 os.path 也有一套非常有用的处理路径的工具,值得一看 :)
太棒了。再次感谢!我会调查的【参考方案2】:
你真的不想通过json!
addressbatch
返回一个很好的 dicts 列表,可以直接用于平滑地输入 pandas DataFrame。
所以你有两种方法:构建一个大的字典列表并最终构建数据框:
data = []
for i in range(1,3):
k = cg.addressbatch('dta/batchfiles/split_test ' + str(i) + '.csv')
data.extend(k) # add the new rows to the main list
df = pd.DataFrame(data)
另一种方法是为每个 csv 文件构建一个数据框,将其存储到一个列表中并在最后连接所有内容:
dfs = []
for i in range(1,3):
k = cg.addressbatch('dta/batchfiles/split_test ' + str(i) + '.csv')
dfs.append(pd.DataFrame(k))
df = pd.concat(dfs)
这两种方法大致相同。在我的测试中,第一个似乎效率更高一些,但数量级相同。
【讨论】:
以上是关于对变量名使用迭代器的替代方法的主要内容,如果未能解决你的问题,请参考以下文章