好几次,我在matlab,fortran ......中遇到过这个术语......但是我从来没有找到解释是什么意思,它有什么作用?所以我在这里问,什么是矢量化,例如,"循环是矢量化的"是什么意思?
我在pandas中有一个带有混合int和str数据列的数据帧.我想先连接数据框中的列.要做到这一点,我必须将int列转换为str.我试着这样做:
mtrx['X.3'] = mtrx.to_string(columns = ['X.3'])
Run Code Online (Sandbox Code Playgroud)
要么
mtrx['X.3'] = mtrx['X.3'].astype(str)
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下它都不起作用,我收到的错误是"无法连接'str'和'int'对象".连接两str列是完美的.
我想知道为什么repr(int)比快str(int).使用以下代码段:
ROUNDS = 10000
def concat_strings_str():
return ''.join(map(str, range(ROUNDS)))
def concat_strings_repr():
return ''.join(map(repr, range(ROUNDS)))
%timeit concat_strings_str()
%timeit concat_strings_repr()
Run Code Online (Sandbox Code Playgroud)
我得到了这些时间(python 3.5.2,但与2.7.12的结果非常相似):
1.9 ms ± 17.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
1.38 ms ± 9.07 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Run Code Online (Sandbox Code Playgroud)
如果我走在正确的道路上,同样的功能long_to_decimal_string就会在引擎盖下面调用.
我错了什么或者我还缺少什么?
更新:这可能没有什么用int的__repr__或__str__方法,但之间的差异repr()和str(),如int.__str__和 …
Numpy似乎区分str和object类型.比如我可以做::
>>> import pandas as pd
>>> import numpy as np
>>> np.dtype(str)
dtype('S')
>>> np.dtype(object)
dtype('O')
Run Code Online (Sandbox Code Playgroud)
其中D型("S")和D型("O")对应于str和object分别.
但是熊猫似乎就缺少了区分,并要挟str到object.::
>>> df = pd.DataFrame({'a': np.arange(5)})
>>> df.a.dtype
dtype('int64')
>>> df.a.astype(str).dtype
dtype('O')
>>> df.a.astype(object).dtype
dtype('O')
Run Code Online (Sandbox Code Playgroud)
强制类型dtype('S')也无济于事.::
>>> df.a.astype(np.dtype(str)).dtype
dtype('O')
>>> df.a.astype(np.dtype('S')).dtype
dtype('O')
Run Code Online (Sandbox Code Playgroud)
这种行为有什么解释吗?
我已经下载了一个csv文件,然后将其读取到python数据帧,现在所有4列都有对象类型,我想将它们转换为str类型,
现在dtypes的结果如下:
Name object
Position Title object
Department object
Employee Annual Salary object
dtype: object
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法更改类型:
path['Employee Annual Salary'] = path['Employee Annual Salary'].astype(str)
Run Code Online (Sandbox Code Playgroud)
但dtypes仍然返回类型对象,我也尝试在读取csv时提供列类型,
path = pd.read_csv("C:\\Users\\IBM_ADMIN\\Desktop\\ml-1m\\city-of-chicago-salaries.csv",dtype={'Employee Annual Salary':str})
Run Code Online (Sandbox Code Playgroud)
要么
path = pd.read_csv("C:\\Users\\IBM_ADMIN\\Desktop\\ml-1m\\city-of-chicago-salaries.csv",dtype=str)
Run Code Online (Sandbox Code Playgroud)
但仍然无法工作,想知道如何将列类型从对象更改为str,
我需要在我的脚本生成的csv文件中的特定列中添加双引号.
以下是我想到的这种愚蠢的方式.对于这两个固定宽度的字段,它的工作原理是:
df['DATE'] = df['DATE'].str.ljust(9,'"')
df['DATE'] = df['DATE'].str.rjust(10,'"')
df['DEPT CODE'] = df['DEPT CODE'].str.ljust(15,'"')
df[DEPT CODE'] = df['DEPT CODE'].str.rjust(16,'"')
Run Code Online (Sandbox Code Playgroud)
对于以下字段,它不会.它有一个可变长度.因此,如果该值短于标准的6位数,我会得到额外的双引号:"5673"""
df['ID'] = df['ID'].str.ljust(7,'"')
df['ID'] = df['ID'].str.rjust(8,'"')
Run Code Online (Sandbox Code Playgroud)
我试过zfill,但是列中的数据是一个系列 - 当我运行时,我得到"pandas.core.series.Series"
print type(df['ID'])
Run Code Online (Sandbox Code Playgroud)
我无法使用astype将其转换为字符串.我不知道为什么.我没有进口numpy.
我尝试使用len()来获取ID号的长度,并将其作为第一个参数传递给str.ljust和str.rjust,但我认为它挂起的数据不是字符串.
是否有一种更简单的方法可以根据需要应用双引号,还是zfill将成为可行的方法?
所以,我有一个非常大的数据框,有 85 列和近 90,000 行,我想在所有这些中使用 str.lower() 。但是,有几列包含数字数据。有没有一个简单的解决方案?
> df
A B C
0 10 John Dog
1 12 Jack Cat
2 54 Mary Monkey
3 23 Bob Horse
Run Code Online (Sandbox Code Playgroud)
比,在使用像 df.applymap(str.lower) 这样的东西后,我会得到:
> df
A B C
0 10 john dog
1 12 jack cat
2 54 mary monkey
3 23 bob horse
Run Code Online (Sandbox Code Playgroud)
目前它显示此错误消息:
TypeError: descriptor 'lower' requires a 'str' object but received a 'int'
Run Code Online (Sandbox Code Playgroud) python ×5
dataframe ×3
pandas ×3
numpy ×2
csv ×1
int ×1
performance ×1
python-2.7 ×1
string ×1