从CVS创建多个变量只使用datafram的第一行

2024-10-03 11:23:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近发表了一篇关于如何从CSV文件创建多个变量的文章。代码的工作原理是我创建了变量。但是,代码正在创建一组变量,所有变量都等于第一行。我需要代码为数据帧中的每一行生成一个变量

我需要208000个变量,标记为A1:A20800

我目前拥有的代码:

    df = pandas.read_csv(file_name)
    for i in range(1,207999):
        for c in df:
            exec("%s = %s" % ('A' + str(i), c))
            i += 1

我尝试在第二个%s周围添加额外的引号(出现语法错误)。我试过选择df的所有行并使用它。不知道为什么不行!每次我打印一个变量来测试它是否工作时,它都在打印相同的值,(即A1=A2=A3…=A207999)我真正想要的是:

A1=第1行 A2=第2行 . . .

提前感谢您的帮助


Tags: csv数据代码in标记a2pandasdf
3条回答

我不知道熊猫是如何读取文件的,但我猜它会返回一个iterable。在这种情况下,使用islice应该只允许读取20800行:

from itertools import islice

df = pandas.read_csv(file_name)
A = list(islice(df, 20800))

# now access rows: A[index]

所有变量的值都相同,因为在内部for循环中递增i,所以所有Annnn变量可能都设置为最后一个值

所以你想要更像:

In [2]: df = pd.DataFrame({'a':[1,2,3], 'b':[42, 42, 42]})

In [3]: df
Out[3]:
   a   b
0  1  42
1  2  42
2  3  42

In [28]: for c in df:
...:     exec("%s = %s" % ('A' + str(i), c))
...:     i += 1
...:

In [29]: A1
Out[29]:
(0L, a     1
 b    42
 Name: 0, dtype: int64)

In [30]: A1[0]
Out[30]: 0L

In [32]: A1[1]
Out[32]:
a     1
b    42
Name: 0, dtype: int64

如果要创建包含数据帧中每行的值的列表,可以使用方法^{}

[row[1].to_list() for row in df.iterrows()]

如果仍要创建大量变量,可以在循环中这样做:

for row in df.iterrows():
    list_with_row_values = row[0].to_list()
    # create your variables here...

相关问题 更多 >