我正在尝试将Semeion Handwritten Digit Data Set作为pandas DataFrame导入,但是第一行被用作列名。

df.head()
   0.0000  0.0000.1  0.0000.2  0.0000.3  0.0000.4  0.0000.5  1.0000  1.0000.1  \
0     0.0       0.0       0.0       0.0       0.0       1.0     1.0       1.0
1     0.0       0.0       0.0       0.0       0.0       0.0     0.0       0.0
2     0.0       0.0       0.0       0.0       0.0       0.0     1.0       1.0
3     0.0       0.0       0.0       0.0       0.0       0.0     0.0       0.0
4     0.0       0.0       0.0       0.0       1.0       1.0     1.0       1.0

   1.0000.2  1.0000.3 ...   1  0  0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8
0       1.0       1.0 ...   1  0    0    0    0    0    0    0    0    0
1       0.0       1.0 ...   1  0    0    0    0    0    0    0    0    0
2       1.0       1.0 ...   1  0    0    0    0    0    0    0    0    0
3       0.0       1.0 ...   1  0    0    0    0    0    0    0    0    0
4       1.0       1.0 ...   1  0    0    0    0    0    0    0    0    0

[5 rows x 266 columns]


由于DataFrame具有266列,因此我尝试使用lambda和for循环..使用以下代码将数字分配为列名称:

df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/semeion/semeion.data", delimiter = r"\s+",
                names = (lambda x: x for x in range(0,266)) )


但是我得到了奇怪的列名,例如:

>>> df.head(2)
   <function <genexpr>.<lambda> at 0x04F4E588>  \
0                                          0.0
1                                          0.0

   <function <genexpr>.<lambda> at 0x04F4E618>  \
0                                          0.0
1                                          0.0

   <function <genexpr>.<lambda> at 0x04F4E660>  \
0                                          0.0
1                                          0.0


如果删除括号,则代码将引发语法错误:

>>> df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/semeion/semeion.data", delimiter = r"\s+",
                names = lambda x: x for x in range(0,266) )
SyntaxError: invalid syntax


有人可以告诉我:

1)如何获取列名作为数字...从0到266

2)如果万一我得到了以第一行作为列名的DataFrame,我如何下推它并添加新的列名而又不丢失第一行?

TIA

最佳答案

我认为您需要参数header=Nonenames=range(266)来设置read_csv中列的默认名称:

url = "http://archive.ics.uci.edu/ml/machine-learning-databases/semeion/semeion.data"
df = pd.read_csv(url, sep = r"\s+", header=None)




df = pd.read_csv(url, sep = r"\s+", names=range(266))

关于python - Python Pandas-使用For语句添加列名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43053264/

10-13 09:52