- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一个目录中有 1300 个 csv 文件。
每个文件的第一列都有一个日期,然后是过去 20-30 年的每日数据,跨越另外 8 列。
所以像这样,
数据1.csv
Date source1 source2 source3 source4 source5 source6 source 7 source 8
我有 1300 个唯一命名的文件。
import pandas as pd
frame = pd.DataFrame()
length = len(os.listdir(filepath))
for filename in os.listdir(filepath):
file_path = os.path.join(filepath, filename)
print(length,end=" ")
df = pd.read_csv(file_path,index_col=0)
df = pd.concat([df[[col]].assign(Source=f'{filename[:-4]}-{col}').rename(columns={col: 'Data'}) for col in df])
frame = frame.append(df)
length-=1
但是在第 300 个文件附近我有大约 1200 万行,我的代码真的变慢了......
最佳答案
您的循环变慢的原因是每个 .append()
,数据帧必须创建一个副本以分配更多内存,如 here 所述.
如果你的内存力可以容纳所有 ,您可以先用所有数据框填充一个固定大小(1300)的列表,然后使用 df = pd.concat(list_of_dataframes)
,这可能会避免您现在遇到的问题。您的代码可以这样调整:
import pandas as pd
lst = [None for _ in range(1300)] # Creates empty list
for i, filename in enumerate(os.listdir(filepath)):
file_path = os.path.join(filepath, filename)
df = pd.read_csv(file_path,index_col=0)
df = pd.concat([df[[col]].assign(Source=f'{filename[:-4]}-{col}').rename(columns={col: 'Data'}) for col in df])
lst[i] = df
frame = pd.concat(lst)
关于python - 将 1300 个数据帧合并为一个帧变得非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64388874/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!