我有一个问题与附加的 Dataframe 。我试图执行此代码
df_all = pd.read_csv('data.csv', error_bad_lines=False, chunksize=1000000)
urls = pd.read_excel('url_june.xlsx')
substr = urls.url.values.tolist()
df_res = pd.DataFrame()
for df in df_all:
for i in substr:
res = df[df['url'].str.contains(i)]
df_res.append(res)
当我试图保存df_res
时,我得到了空的 Dataframe 。
ID,"url","used_at","active_seconds"
b20f9412f914ad83b6611d69dbe3b2b4,"mobiguru.ru/phones/apple/comp/32gb/apple_iphone_5s.html",2015-10-01 00:00:25,1
b20f9412f914ad83b6611d69dbe3b2b4,"mobiguru.ru/phones/apple/comp/32gb/apple_iphone_5s.html",2015-10-01 00:00:31,30
f85ce4b2f8787d48edc8612b2ccaca83,"4pda.ru/forum/index.php?showtopic=634566&view=getnewpost",2015-10-01 00:01:49,2
d3b0ef7d85dbb4dbb75e8a5950bad225,"shop.mts.ru/smartfony/mts/smartfon-smart-sprint-4g-sim-lock-white.html?utm_source=admitad&utm_medium=cpa&utm_content=300&utm_campaign=gde_cpa&uid=3",2015-10-01 00:03:19,34
078d388438ebf1d4142808f58fb66c87,"market.yandex.ru/product/12675734/spec?hid=91491&track=char",2015-10-01 00:03:48,2
d3b0ef7d85dbb4dbb75e8a5950bad225,"avito.ru/yoshkar-ola/telefony/mts",2015-10-01 00:04:21,4
d3b0ef7d85dbb4dbb75e8a5950bad225,"shoppingcart.aliexpress.com/order/confirm_order",2015-10-01 00:04:25,1
d3b0ef7d85dbb4dbb75e8a5950bad225,"shoppingcart.aliexpress.com/order/confirm_order",2015-10-01 00:04:26,9
urls
看起来像
url
shoppingcart.aliexpress.com/order/confirm_order
ozon.ru/?context=order_done&number=
lk.wildberries.ru/basket/orderconfirmed
lamoda.ru/checkout/onepage/success/quick
mvideo.ru/confirmation?_requestid=
eldorado.ru/personal/order.php?step=confirm
当我在循环中打印res
时,它不为空。但是当我在append后尝试在循环中打印df_res
时,它返回空的dataframe。我找不到我的错误。我如何修复它?
3条答案
按热度按时间yks3o0rb1#
如果你看the documentation for
pd.DataFrame.append
将other的行追加到此框架的末尾,返回一个新对象。不在此框架中的列将作为新列添加。
(强调我的)。
试试看
顺便说一句,请注意pandas在通过连续的串联创建DataFrame时效率不高。您可以尝试以下操作:
这首先创建一个所有部件的列表,然后在最后从所有部件创建一个DataFrame。
3npbholx2#
如果我们想根据索引追加:
f4t66c6m3#
为什么会出现“AttributeError:“DataFrame”对象没有属性“append”?
pandas〉= 2.0
append
已移除,使用pd.concat
代替1从pandas 2.0开始,
append
已经从API中删除。它之前在版本1.4中被弃用。请参阅弃用文档以及最初提出弃用的this github issue。删除它的理由是不鼓励在循环中迭代增长DataFrames(这是人们通常使用append的原因)。这是因为append在每个阶段都会创建一个新的副本,导致内存中的二次复杂度。
1.这是假设你要将一个DataFrame附加到另一个DataFrame上。如果你要将一行附加到一个DataFrame上,解决方案会略有不同--见下文。
追加 Dataframe 的惯用方法是将所有较小的 Dataframe 收集到一个列表中,然后对
pd.concat
进行一次调用。请注意,如果您尝试一次追加一行而不是一次追加一个DataFrame,那么解决方案甚至更简单。
关于Creating an empty Pandas DataFrame, and then filling it?的更多信息