使用 for 循环将行迭代到使用 Pandas 和 Numpy Python 的 csv 文件

Posted

技术标签:

【中文标题】使用 for 循环将行迭代到使用 Pandas 和 Numpy Python 的 csv 文件【英文标题】:Iterating rows with a for loop to a csv file with Pandas and Numpy Python 【发布时间】:2021-06-24 13:47:36 【问题描述】:

下面的代码旨在将[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

【问题讨论】:

试试dataframe = pandas.DataFrame([data]) 而不是dataframe = pandas.DataFrame(data) ?只是猜测看你的代码,没有尝试过。看起来您想创建 4 列,但是您传递了一个列表而不是列表的列表,这就是为什么您最终得到 1 列而不是 4 列的原因。 @ExplooreX 知道了。 :) 我只评论了 为什么它不起作用,可能是如果我们作为列表附加我们不需要 mode = 'a' 在你的答案中......? 【参考方案1】:

查看此代码:

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)

方法二 如果您想使用@anky 用户评论,您必须查看lenlen(Values),这大约是100k,我们正在处理每个iterationdataframe and file,这需要很长时间,然后将其附加到@ 987654327@,然后添加到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)

【讨论】:

【参考方案2】:

那是因为你的 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

或者您可以将nest 数据list 发送到另一个list 为:

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

【讨论】:

以上是关于使用 for 循环将行迭代到使用 Pandas 和 Numpy Python 的 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

迭代 4 个 pandas 数据框列并将它们存储到 4 个列表中,其中一个 for 循环而不是 4 个 for 循环

Matlab - 迭代地将行插入/追加到矩阵中

PL/SQL 将行存储到变量中并在 for 循环中使用它们

如何在 Pandas 中使用 For 循环 KEY 命名 DataFrame

使用作为字符串一部分的整数迭代 for 循环

对于表中的行,将行保存在临时表中以在 plpgsql 的选择查询中使用其数据