通过选择其他列

时间:2016-10-27 17:43:22

标签: python pandas

我在Matlab编程方面有很多经验,现在使用Python而我只是不能让这个东西工作......我有一个包含时间码如00:00:00.033的列的数据框。

timecodes = ['00:00:01.001', '00:00:03.201', '00:00:09.231', '00:00:11.301', '00:00:20.601', '00:00:31.231', '00:00:90.441', '00:00:91.301']
df = pd.DataFrame(timecodes, columns=['TimeCodes'])

我的所有输入都是90秒或更短,所以我想创建一个只有秒为float的列。要做到这一点,我需要选择位置6结束并将其变为浮点数,我可以为第一行执行以下操作:

float(df['TimeCodes'][0][6:])

这很好用,但如果我现在要创建一个全新的列' Time_sec',则以下内容不起作用:

df['Time_sec'] = float(df['TimeCodes'][:][6:])

因为df [' TimeCodes'] [:] [6:]将第6行带到最后一行,而我希望每行包含第6个到最后一个位置。这也行不通:

 df['Time_sec'] = float(df['TimeCodes'][:,6:])

我需要制作一个循环吗?必须有一个更好的方法...为什么df [' TimeCodes'] [:] [6:]不起作用?

2 个答案:

答案 0 :(得分:0)

您可以使用slice字符串方法,然后将整个事物转换为浮点数:

In [13]: df["TimeCodes"].str.slice(6).astype(float)
Out[13]:
0     1.001
1     3.201
2     9.231
3    11.301
4    20.601
5    31.231
6    90.441
7    91.301
Name: TimeCodes, dtype: float64

至于为什么df['TimeCodes'][:][6:]不起作用,最终做的是链接一些选择。首先,您抓取与pd.Series列关联的TimeCodes,然后选择系列中包含[:]的所有项目,然后您只需选择索引为6或更高的项目{ {1}}。

答案 1 :(得分:0)

解决方案 - indexing with str并按astype转换为float

print (df["TimeCodes"].str[6:])
0    01.001
1    03.201
2    09.231
3    11.301
4    20.601
5    31.231
6    90.441
7    91.301
Name: TimeCodes, dtype: object

df['new'] = df["TimeCodes"].str[6:].astype(float)
print (df)
      TimeCodes     new
0  00:00:01.001   1.001
1  00:00:03.201   3.201
2  00:00:09.231   9.231
3  00:00:11.301  11.301
4  00:00:20.601  20.601
5  00:00:31.231  31.231
6  00:00:90.441  90.441
7  00:00:91.301  91.301