创建DataFrame or 插入行(DataFrame.append / DateFrame.loc)

对比了readline速度,
使用list.append并一次合并DataFrame,
使用逐行创建DataFrame,再用DataFrame.append合并,
使用DataFrame.loc[] = []的方式逐行插入数据。

为DataFrame插入数据是非常不建议的选择,
应该直接用list装入所有数据,最后一次性合成DataFrame。
(文件大小:6200 kb,43000 行)

import pandas as pd
from datetime import *


def test(path):
	start = datetime.now()
	with open(path) as f:
		all = pd.DataFrame()
		while True:
			i_line = f.readline()
			if i_line == "":
				break
			if i_line.find("Date") == -1:
				new = pd.DataFrame({"Date":i_line.split(",")[0],"value":i_line.split(",")[6]},index=["0"])
				all = all.append(new, ignore_index=True)
	end = datetime.now()
	print(end-start)
	return all

def test_loc(path):
	start = datetime.now()
	with open(path) as f:
		all_loc = pd.DataFrame({"Date":[],"value":[]},index=[])
		n=0
		while True:
			i_line = f.readline()
			if i_line == "":
				break
			if i_line.find("Date") == -1:
				all_loc.loc[n] = [i_line.split(",")[0], i_line.split(",")[6]]
				n+=1
	end = datetime.now()
	print(end-start)
	return all_loc

def test_readline(path):
	start = datetime.now()
	with open(path) as f:
		while True:
			i_line = f.readline()
			if i_line == "":
				break
			if i_line.find("Date") == -1:
				pass
	end = datetime.now()
	print(end-start)

def test_list(path):
	start = datetime.now()
	with open(path) as f:
		list_date = []
		list_value = []
		while True:
			i_line = f.readline()
			if i_line == "":
				break
			if i_line.find("Date") == -1:
				list_date.append(i_line.split(",")[0])
				list_value.append(i_line.split(",")[6])
	all_list = pd.DataFrame({"Datetime":list_date, "value":list_value})
	end = datetime.now()
	print(end-start)
	return all_list
test_readline(path)
df_list = test_list(path)
df = test(path)
df_loc = test_loc(path)

# 0.006s
# 0.153s
# 1M0.52S
# 2M40S

### 插入至 Pandas DataFrame 对于在 `pandas` 的 `DataFrame` 中插入新的,可以采用多种方式实现这一目标。一种常见的方式是利用 `numpy.insert()` 函数来完成操作[^1]。 ```python import pandas as pd import numpy as np df = pd.DataFrame({ 'points': [25, 12, 15], 'assists': [5, 7, 7], 'rebounds': [11, 8, 10] }) # insert a row with values [1, 7, 6] into the DataFrame at index=1 (second position) new_df = pd.DataFrame(np.insert(df.values, 1, values=[1, 7, 6], axis=0), columns=df.columns) print(new_df) ``` 上述代码展示了如何向现有的 `DataFrame` 中指定的位置插入数据。需要注意的是,在执此操作之后,原始的 `DataFrame` 并未被修改;而是创建了一个包含新增的新 `DataFrame` 实例。 除了这种方法之外,还可以考虑其他更灵活的方式来添加单个或多个新到 `DataFrame` 中: #### 使用 concat 或 append 方法(适用于较旧版本) 对于希望追加多的情况,或者为了保持原有索引结构不变的情况下,推荐使用 `pd.concat()` 或者 `.append()` 方法(注意:`.append()` 已经在最新版 pandas 中弃用)。这些方法允许一次性加入一系列记录而无需逐条处理。 ```python # Example using concat to add multiple rows represented by another DataFrame or list of dictionaries. additional_rows = [{'points': 30, 'assists': 4, 'rebounds': 9}, {'points': 28, 'assists': 5, 'rebounds': 7}] extended_df = pd.concat([df, pd.DataFrame(additional_rows)], ignore_index=True) print(extended_df) ``` 这种方式不仅限于简单的数值列表,还支持字典形式的数据输入,使得构建复杂结构更加直观方便。 #### 利用 loc 属性直接赋值 如果只需要简单地增加一条记录,并且不介意它总是位于表末,则可以直接通过设置 `loc[]` 来达到目的: ```python df.loc[len(df)] = [30, 4, 9] print(df) ``` 这段代码会在原 `DataFrame` 上直接进更改,将给定的一组值作为新的一附加到最后面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值