我正在使用pandas.read_excel()
函数将excel文件导入到pandas数据框中。
其中一列是表格的主键:它是所有数字,但它以文本形式存储(Excel单元格左上角的绿色小三角确认了这一点)。
但是,当我将文件导入pandas数据帧时,该列将作为float导入。这意味着,例如,'0614'变为614。
导入列时是否有指定数据类型的方法?我知道在导入CSV文件时可能会出现这种情况,但在read_excel()
的语法中找不到任何内容。
我能想到的唯一解决方案是在Excel的文本开头添加一个任意字母(将'0614'转换为'A0614'),以确保将列导入为文本,然后切断python中的'A',所以我可以将它与我从SQL导入的其他表匹配。
答案 0 :(得分:70)
您只需指定转换器即可。我创建了一个以下结构的Excel电子表格:
names ages
bob 05
tom 4
suzy 3
“年龄”列的格式为字符串。加载:
import pandas as pd
df = pd.read_excel('Book1.xlsx',sheetname='Sheet1',header=0,converters={'names':str,'ages':str})
>>> df
names ages
0 bob 05
1 tom 4
2 suzy 3
答案 1 :(得分:17)
从v0.20.0
开始,read_excel()
函数中的dtype
关键字参数可用于指定需要应用于列的数据类型,就像它存在于{{3案件。
在同一列名称上同时使用converters
和dtype
个参数会导致后者被遮蔽而前者会获得优先权。
1)为了使它不解释dtypes
而是传递它之前在文件中的所有内容,我们可以将此arg设置为str
或{{1所以我们不会弄乱我们的数据。 (一个这样的情况将是数字中的前导零,否则会丢失)
object
2)它甚至支持一个dict映射,其中pd.read_excel('file_name.xlsx', dtype=str) # (or) dtype=object
构成列名,keys
它是各自要设置的数据类型,尤其是当您想要更改子集的values
时所有栏目。
dtype
答案 2 :(得分:8)
read_excel()函数有一个converter参数,您可以在其中应用函数以在某些列中输入。您可以使用它将它们保存为字符串。 Documentation:
用于转换某些列中的值的函数的字典。键可以是整数或列标签,值是带有一个输入参数的函数,Excel单元格内容,并返回转换后的内容。
示例代码:
pandas.read_excel(my_file, converters = {my_str_column: str})
答案 3 :(得分:5)
如果你不知道数据帧中列的数量和名称,那么这个方法可以很方便:
column_list = []
df_column = pd.read_excel(file_name, 'Sheet1').columns
for i in df_column:
column_list.append(i)
converter = {col: str for col in column_list}
df_actual = pd.read_excel(file_name, converters=converter)
其中column_list是列名列表。
答案 4 :(得分:3)
如果您能够正确读取 excel 文件并且只有整数值没有显示。你可以这样指定。
df = pd.read_excel('my.xlsx',sheetname='Sheet1', engine="openpyxl", dtype=str)
这应该将您的整数值更改为字符串并显示在数据框中
答案 5 :(得分:1)
如果您不知道列名,并且想为所有列指定 str 数据类型:
table = pd.read_excel("path_to_filename")
cols = table.columns
conv = dict(zip(cols ,[str] * len(cols)))
table = pd.read_excel("path_to_filename", converters=conv)
答案 6 :(得分:0)
如果键的位数固定,则应该存储为文本而不是数字数据。您可以为此使用converters
参数或read_excel
。
或者,如果这不起作用,则只要将数据读入数据框就可以对其进行操作:
df['key_zfill'] = df['key'].astype(str).str.zfill(4)
names key key_zfill
0 abc 5 0005
1 def 4962 4962
2 ghi 300 0300
3 jkl 14 0014
4 mno 20 0020