使用Pandas和NumpyPython将带有for循环的行循环到csv文件



下面的代码旨在将[Val1, Val2, Val3, Val4]迭代到csv文件中。它将每次迭代保存为带有dataframe.to_csv("sales.csv", index=False, mode='a', header=False)代码的csv代码。然而,该代码为每个Val值制作了一个单独的行,如Ouput中所示。我想让val1-4在每次迭代中逐行打印。我怎么能那样做才能拿到Expected output呢。作为结果。

from numpy import random
import pandas
Values = random.randint(100, size=(100000))
Number_array = random.randint(100, size=(1000))
for n in range(len(Values)):
val1 = np.sum(Number_array) + Values[n] * len(Number_array)
val2 = np.sum([Number_array])
val3 = val1 * val2
val4 = n * 2
data =[Val1, Val2, Val3, Val4]
dataframe = pandas.DataFrame(data)
dataframe.to_csv("input.csv", index=False, mode='a', header=False)

input.csv文件:

Val1, Val2, Val3, Val4

输出:

Val1, Val2, Val3, Val4
49793 
48793 
-1865417447 
0
82793
48793
-255248447 
2

预期输出

Val1, Val2, Val3, Val4
49793,48793, -1865417447, 0
82793, 48793, -255248447, 2

查看此代码:

l = []
for n in range(len(Values)):
val1 = np.sum(Number_array) + Values[n] * len(Number_array)
val2 = np.sum([Number_array])
val3 = val1 * val2
val4 = n * 2
data =[val1, val2, val3, val4]
# dataframe = pandas.DataFrame([data])
l.append(data)
dataframe = pandas.DataFrame(l)
dataframe.to_csv("input.csv", index=False, mode='a', header=False)

方法-2如果你想使用@anky用户评论,你必须在len(Values)查看len,这是关于100k的,我们在每个iteration处理dataframe and file,这需要很多时间,然后将其附加到list,然后添加到file,因为这里file-process只是one step

只需更改:

dataframe = pandas.DataFrame(data)

到:

dataframe = pandas.DataFrame([data])

时间消耗分析

1st-case:
0.38395023345947266 s ± 15.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

2nd-case:  
350.7548952102661 s ± 15.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

这是因为您的dataframe看起来像

>>data
[1, 2, 3, 4]
>>dataframe = pd.DataFrame(data)
>>dataframe
0
0  1
1  2
2  3
3  4

你只需要Transpose数据帧就可以得到你想要的格式

>>dataframe.T
0  1  2  3
0  1  2  3  4

或者您可以只将数据nestlistlist作为:

>>dataframe = pd.DataFrame([data])
>>dataframe
0  1  2  3
0  1  2  3  4

最新更新