使用 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 用户评论,您必须查看len
len(Values)
,这大约是100k
,我们正在处理每个iteration
的dataframe 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 循环