python - 从数组/列表中加入熊猫数据框
问题描述
我正在尝试合并(连接)从 csv 文件中选择的数据帧。我以前手动实现了这一点,但想使用(tkinter)文件对话框,以便用户可以选择一个或多个文件在数据框中使用。我所拥有的是:
- 将文件名读入数组,直到用户按下取消 - 一切都好
while True:
root = Tk()
root.withdraw()
filename = filedialog.askopenfilename(title='Open data file', filetypes=(("Comma separated values", "*.csv"),))
if filename =="":
break
filenames.append(filename)
- 使用文件名生成数据框 - 单独都很好(我认为,因为它们打印正常)
def read_Yokogawa(filename):
frame = pd.read_csv(filename, header = 46, skiprows = [47, 48], low_memory = False, parse_dates = True, infer_datetime_format = True, na_values = ['+OVER', '-OVER'])
print(frame)
return frame
dfs=[] #Set an empty array of dataframes
for filename in filenames:
dfs.append([read_Yokogawa(filename)]) #Append each dataframe to the array
- 将数据帧数组连接在一起 -不好
df = pd.concat(dfs)
我收到错误:TypeError: cannot concatenate object of type ''; 只有 Series 和 DataFrame obj 是有效的
所有文件都具有相同的列,因为它们是由相同的软件生成的。我也试过pd.concat([dfs])
,但得到同样的错误。
解决方案
@Quang 和 @Renaud 都提出了同样的建议,结果证明这是对这个问题的一个很好的回答。
dfs=[]
for filename in filenames:
dfs.append(read_Yokogawa(filename))
df = pd.concat(dfs)
推荐阅读
- python - 如何让 Python Scrapy 从网页中提取所有外部链接的所有域?
- email - Postfix Dovecot imap sql虚拟邮件服务器没有将邮件返回给客户端
- docker - network_mode: service:XXX over the bridge
- ubuntu - 尝试删除ubuntu上所有已安装的文件
- reactjs - 在文本字段中键入时,Formik 材质 ui 不断重新渲染
- javascript - Laravel 8 - 无法删除数据
- google-apps-script - 使用 on Edit 触发器在 Google 电子表格中更改单元格值时自动发送电子邮件
- python - 如何使用条件更改列表的字典
- c++ - 我该如何完成这个例子?
- powerbi - 在 Power BI 中查找 Last hour, Last 'x' minute/s 详细信息(来自 SQL Server 的数据)