在CSV文件头记录的目标字段中用连字符替换空格

bvjxkvbb  于 9个月前  发布在  其他
关注(0)|答案(4)|浏览(125)

父批处理脚本运行python脚本,它从URL中检索CSV。我正在组合这些脚本,但其中一个头中的某些数据有空格,我需要用连字符替换。
示例:“白色Singlet Size 1”变为“White-Singlet-Size-1”,而不影响其他标题/字段。
到目前为止,我还没有找到一个脚本,目标字符串中的字符,而不破坏一切。
我已经在使用df.loc来处理整个单词/字段了。

df.loc[df['Supplier Stock Level'] > 0, 'Variant Inventory Policy'] = 'Continue'

字符串
我用它来设置Continue,如果大于0,但希望能够有像'如果有空格',它输出相同的文本与连字符,而不是他们。

df.loc[df['%OLDHEADER%'] replace=" ", '%NEWHEADER%'] = with='-'

vjrehmav

vjrehmav1#

下面的代码对你有用吗?

import pandas as pd

df = pd.DataFrame({"to be replaced": [1, 2, 3], "more replacement": [4, 5, 6]})
print(f"initial df:\n{df}")
df.columns = df.columns.map(lambda x: x.replace(" ", "-"))
print(f"final df:\n{df}")

字符串
打印:

initial df:
   to be replaced  more replacement
0               1                 4
1               2                 5
2               3                 6
final df:
   to-be-replaced  more-replacement
0               1                 4
1               2                 5
2               3                 6

gmol1639

gmol16392#

我相信你在pandas中寻找一个列别名,目前在https://github.com/pandas-dev/pandas/issues/11723中还不支持。
你可以在任何字符串对象上使用方法.replace,如下所述:https://docs.python.org/3/library/stdtypes.html?highlight=replace#str.replace

df.loc[df['White-Singlet-Size-1'.replace('-', ' ')]]

字符串
如果你喜欢一些有点冗长的东西,你可以首先将名称定义为一个常量,比如:

WHITE_SINGLELET_SIZE_1 = 'White Singlet Size 1'

....
df.loc(df[WHITE_SINGLELET_SIZE_1]])


您还可以使用在https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.columns.html中指定的df.columns来更改列名

qf9go6mv

qf9go6mv3#

另一个版本:

df.columns = df.columns.str.replace(" ", "-")
print(df)

字符串
打印:

to-be-replaced  more-replacement
0               1                 4
1               2                 5
2               3                 6

pwuypxnk

pwuypxnk4#

由于这是一个批处理文件,

@ECHO OFF
SETLOCAL
SET "sourcedir=u:\your files"

FOR /f "delims=" %%e IN ('dir /b /a-d "%sourcedir%\*.csv" ') DO (
 SET "firstline="
 (
  FOR /f "usebackqdelims=" %%y IN ("%sourcedir%\%%~nxe") DO (
  IF DEFINED firstline (ECHO %%y) ELSE (SET "firstline=%%y"&CALL ECHO %%firstline: =-%%)
  )
 )>tempfile
 MOVE /y tempfile "%sourcedir%\%%~nxe" >nul
)

字符串
其中sourcedirtempfile是用户的选择。
简单地说,对于每个找到的.csv(名称为%%e),清除一个布尔标志firstline,从%%e中读取每一行,第一行,设置标志并将该行中的空格替换为破折号,否则逐字逐句删除。
将输出收集到tempfile,然后使用修改后的内容覆盖原始文件,从而隐藏1 file() moved消息。

相关问题