【问题标题】:Converting strings to a lower case in pandas [duplicate]在熊猫中将字符串转换为小写[重复]
【发布时间】:2017-08-02 16:43:38
【问题描述】:

我有一个包含域名的数据:

 url          var1
www.CNN.com   xsd
www.Nbc.com   wer
www.BBc.com   xyz
www.fOX.com   zyx
....

数据是系列类型。我正在使用以下内容将 url 变量转换为小写:

df.apply(lambda x: x.astype(str).str.lower())

但是,它们保持不变。

我做错了什么?

【问题讨论】:

    标签: python string pandas lowercase


    【解决方案1】:

    要转换我们可以使用的单列,

    df.column_name.str.lower()
    

    df['column_name'].str.lower()
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      我认为您需要重新分配输出,如果仅适用于列 url,则最好省略 apply

      df = pd.DataFrame({'url': ['www.CNN.com', 'www.Nbc.com', 'www.BBc.com', 'www.fOX.com'], 
                         'var1': ['XSD', 'wer', 'xyz', 'zyx']})
      
      print (df)
                 url var1
      0  www.CNN.com  XSD
      1  www.Nbc.com  wer
      2  www.BBc.com  xyz
      3  www.fOX.com  zyx
      
      #if types of column is str, astype is not necessary
      df.url = df.url.astype(str).str.lower()
      print (df)
                 url var1
      0  www.cnn.com  XSD
      1  www.nbc.com  wer
      2  www.bbc.com  xyz
      3  www.fox.com  zyx
      

      但如果需要将df 的所有列转换为lowercase strings:

      df = df.astype(str).apply(lambda x: x.str.lower())
      print (df)
                 url var1
      0  www.cnn.com  xsd
      1  www.nbc.com  wer
      2  www.bbc.com  xyz
      3  www.fox.com  zyx
      

      【讨论】:

      • 第一个解决方案产生了一个错误//anaconda/lib/python3.5/site-packages/pandas/core/generic.py:2701: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self[name] = value 第二个解决方案虽然有效
      • 我认为问题出在这一行上面的代码中,你能分享上面的 2,3 行吗?
      • 或者检查docs
      • 我添加了测试样本,你有错误吗?
      【解决方案3】:
      df['url'] = df['url'].str.lower()
      

      应该对系列进行操作,替换为小写版本。

      【讨论】:

      • 收到错误//anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy app.launch_new_instance()
      • @FeyziBagirov 我没有在我的测试数据集中得到那个我试图镜像你的数据集(也是 python 3.5)。您能否在您的问题中发布代码以生成数据集,以便我们拥有相同的输入?
      • @FeyziBagirov 你可以试试df['url'] = df.loc[:,'url'].str.lower() 但我同意大卫的观点,这里没有必要
      • @FeyziBagirov:对我来说,语法如下:df.loc[:, 'url'] = df.loc[:, 'url'].str.lower() 终于奏效了。
      猜你喜欢
      • 1970-01-01
      • 2019-05-01
      • 2021-09-19
      • 2019-07-25
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多