我正在尝试遍历数据框并获得此处描述的解决方案Old Post。不知怎的,我正在寻找更具体的东西,我刚刚意识到。循环应计算结果并将每个日期的输出写入csv文件,其中csv文件包含日期,文件中应包含日期和结果作为文件名。我更喜欢使用循环并只是扩展代码。
import pandas as pd
def calc_funct(x):
func = x^2
return func
def calc_funct2(y):
func = y^3
return func
if __name__ == '__main__':
df = pd.read_csv('C:/Data.csv')
for index, row in df.iterrows():
result = []
result = (calc_funct(row['x']))
print(result)
输入如下所示:
date x y z
0 2017-11-11 18 17 7
1 2017-11-11 16 19 3
2 2017-11-11 13 14 2
3 2017-11-11 12 13 1
4 2017-11-11 11 12 9
5 2017-11-11 10 11 10
6 2017-11-11 21 10 11
7 2017-11-12 13 19 12
8 2017-11-13 18 17 12
9 2017-11-14 9 10 20
10 2017-11-15 2 20 13
11 2017-11-18 13 13 9
12 2017-11-19 18 14 16
13 2017-11-20 14 11 19
14 2017-11-21 18 15 19
为了让它变得更容易理解我包含了一个手工制作的考试,我想让它更自动化,因为我在数据框中获取所有数据并从中获取适当的数据,这取决于日期并扩展它使它更清楚。也许我的解释太糟糕了,并试图找出一种更容易理解的方式:
for loop date 1 (2017-11-11):
result = []
for loop through values for the dedictaed date (Note every result is an own object at the end):
result = OwnObject(calc_funct(x),calc_funct2(y/100))
store results in a csv file with the date given (2017-11-11)
Loop date 2 (2017-11-12):
result = OwnObject(calc_funct(x),calc_funct2(y/100))
store results in a csv file with the date given (2017-11-12)
等等......
目前OwnObject并不那么重要
答案 0 :(得分:1)
你可以在for循环结束时write csv:
store_result = {}
for index, row in df.iterrows():
result = []
result = (calc_funct(row['x'], row['y'], row['z']))
store_result[date] = result
with open(row["date"] + '.csv', 'wb') as csvfile:
csv_writer = csv.writer(csvfile)
csv_writer.writerow(row["date"] + "," + str(result))
答案 1 :(得分:1)
我强烈推荐去熊猫的方式。那你为什么要用熊猫呢?要轻松阅读和保存csv?
也许这会激励你。
这就是您的约会对象。
df = pd.DataFrame([
['2017-11-11', 18, 17, 7],
['2017-11-11', 16, 19, 3],
['2017-11-12', 10, 4, 5],
['2017-11-11', 1, 2, 3],
], columns=['date', 'x', 'y', 'z'])
首先,您需要确保您的值格式正确。
df.date = pd.to_datetime(df.date)
df.x = pd.to_numeric(df.x)
df.y = pd.to_numeric(df.y)
df.z = pd.to_numeric(df.z)
print(df.date.dtype) # datetime64[ns]
如果您不想应用更改,可以在新列中轻松完成。
df = df.assign(x2=df.x.apply(calc_funct))
df = df.assign(y2=df.y.apply(calc_funct2))
df
date x y z x2 y2
0 2017-11-11 18 17 7 16 18
1 2017-11-11 16 19 3 18 16
2 2017-11-12 10 4 5 8 7
3 2017-11-11 1 2 3 3 1
之后,您可以进行分组,聚合,您可以将计算应用于特定日期的一组结果。
通过这种方法,您可以根据需要进行尽可能多的计算,这是对绩效和教育的真正投资。
<强>更新强>
您也可以将对象添加到数据框中。
class OwnObject(object):
def __init__(self, x2, y2=None):
self._x2 = x2
self._y2 = y2
def __repr__(self):
# Just for representation reason
return 'OwnObject({}, {})'.format((self._x2), (self._y2))
def create_object(row):
return OwnObject(row.x2, row.y2)
df = df.assign(my_object = df.apply(create_object, axis=1))
df
date x y z x2 y2 my_object
0 2017-11-11 18 17 7 16 18 OwnObject(16, 18)
1 2017-11-11 16 19 3 18 16 OwnObject(18, 16)
2 2017-11-12 10 4 5 8 7 OwnObject(8, 7)
3 2017-11-11 1 2 3 3 1 OwnObject(3, 1)
如果您想获得所有已创建对象的列表:
list(df.my_object)
# outputs: [OwnObject(16, 18), OwnObject(18, 16), OwnObject(8, 7), OwnObject(3, 1)]