有没有办法在数据帧的特定列中添加 0 以匹配特定位数?
Is there ways to add 0s in a specific columns of dataframe to match specific number of digits?
我有两个表,其中一列包含特定 ID。
例如,
TABLE一个
cust_id
1234
32145
1235692
9293159
TABLEB
cust_id
0001234
0032145
1235692
9293159
我正在尝试使用 sql 应用内部联接,但由于它们不完全匹配,因此使用内部联接子句的结果中缺少前两个 ID 1234 (0001234)、32145 (0032145) .
所以这是我的问题。
- 有什么方法可以在TABLE A的cust_id前面添加额外的0来匹配TABLE B的cust_id吗?
比如1234只有4位,转换后就是7位,前面加三个0 --> 0001234.
- 使用 Python 是否更容易处理这些类型的任务?或 SQL?
我过去的数据清理经验告诉我它是 Python,但还有其他建议吗?
如果可能的话,对于这个具体案例,我希望我可以使用 Python 或 SQL 获得帮助。
提前致谢。
对于 python,这可以使用 pandas 轻松处理。
假设 cust_id 已经是一个字符串列:
>>> df.cust_id.apply(lambda x: x.zfill(7))
0 0001234
1 0032145
2 1235692
3 9293159
对于 SQL,您声明您正在使用 SSMS,因此这意味着 SQL 服务器。 SQL 不幸的是,服务器没有开箱即用的 LPAD 功能,但您可以使用以下方法复制它:
REPLACE(STR(<column_name>, <desired_length>),' ','0')
例如:
with cust_ids as (
select * from (
values
('1234'),
('32145'),
('1235692'),
('9293159')
) a (cust_id)
)
select
cust_id,
REPLACE(STR(cust_id, 7),' ','0') as padded_cust_id
from cust_ids
我有两个表,其中一列包含特定 ID。
例如,
TABLE一个
cust_id
1234
32145
1235692
9293159
TABLEB
cust_id
0001234
0032145
1235692
9293159
我正在尝试使用 sql 应用内部联接,但由于它们不完全匹配,因此使用内部联接子句的结果中缺少前两个 ID 1234 (0001234)、32145 (0032145) .
所以这是我的问题。
- 有什么方法可以在TABLE A的cust_id前面添加额外的0来匹配TABLE B的cust_id吗?
比如1234只有4位,转换后就是7位,前面加三个0 --> 0001234.
- 使用 Python 是否更容易处理这些类型的任务?或 SQL? 我过去的数据清理经验告诉我它是 Python,但还有其他建议吗?
如果可能的话,对于这个具体案例,我希望我可以使用 Python 或 SQL 获得帮助。
提前致谢。
对于 python,这可以使用 pandas 轻松处理。
假设 cust_id 已经是一个字符串列:
>>> df.cust_id.apply(lambda x: x.zfill(7))
0 0001234
1 0032145
2 1235692
3 9293159
对于 SQL,您声明您正在使用 SSMS,因此这意味着 SQL 服务器。 SQL 不幸的是,服务器没有开箱即用的 LPAD 功能,但您可以使用以下方法复制它:
REPLACE(STR(<column_name>, <desired_length>),' ','0')
例如:
with cust_ids as (
select * from (
values
('1234'),
('32145'),
('1235692'),
('9293159')
) a (cust_id)
)
select
cust_id,
REPLACE(STR(cust_id, 7),' ','0') as padded_cust_id
from cust_ids